@idaho

YII2 как выбрать данные с определенным критерием?

Есть одна таблица в которой хранятся данные о собаках (родословные)
CREATE TABLE IF NOT EXISTS `pedigrees` (
  `pedigrees_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `sire` varchar(255) NOT NULL,
  `dam` varchar(255) NOT NULL, 
etc


Вывод в сгенеренные GII CRUD страницу view.php

Нужно выбрать потомков и партнеров.
Потомки:
$query.= "FROM pedigrees WHERE sire = $id or dam = $id order by name";

как это перевести в yii2 запрос?
в моделе:
public function getChild(){

        return $this->hasOne(Pedigrees::className(), ['dam' => 'pedigrees_id', 'sire' => 'pedigrees_id']);
    }


вывод во вьюшку:
<?php if (isset($model->child)) {
              echo Html::a( Html::encode($model->child->name, $model->child->pedigrees_id), Url::to(['pedigrees/view', 'id' => $model->child->pedigrees_id]));
                }else{  echo "No info";  } ?>

С партнерами чуть сложнее:
$query.= "from (SELECT dam as partner_id FROM pedigrees WHERE (sire=$id and dam<>0) group by dam
				union SELECT sire as partner_id FROM pedigrees WHERE (dam=$id and sire<>0) group by sire) t 
				order by (select a.name from pedigrees a where a.pedigrees_id=t.partner_id)";
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
@idaho Автор вопроса
в таком варианте выходит ошибка Getting unknown property: app\controllers\PedigreesController::partner
public function actionView($id)
    {
       $query = "SELECT dam as partner_id FROM pedigrees WHERE (sire=$id and dam<>0) group by dam union SELECT sire as partner_id FROM pedigrees WHERE (dam=$id and sire<>0) group by sire order by (select a.name from pedigrees a where pedigrees_id=partner_id)";
       $partner = Pedigrees::findBySql($query)->all();
           return $this->render('view', [
            'model' => $this->findModel($id),
            'partner' => $this->partner,
        ]);
    }

вывод:
<?php foreach ($partners as $name) {
    echo $name->name . '<br>';
}?>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Если я Вас правильно понял:
public function getDam(){
        return $this->hasMany(Pedigrees::className(), ['dam' => 'pedigrees_id']);
}
public function getSire(){
        return $this->hasMany(Pedigrees::className(), ['sire' => 'pedigrees_id']);
}
public function getSireAndDame(){
        return $this->getSire()->union($this->getDam());
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы