@evilelf
Тупой, руки из жопы, кодю за зп и т.п. и т.д.

Как разобраться с many-to-many yii2?

Всем привет.

Никак не могу понять логику связей многое-ко-многим средствами yii2.
У меня есть 3 таблицы:
  • problems (organ)
  • problems_organ (ID)
  • problems_has_organ

Нужно связать problems с problems_organ, через problems_has_organ
Вот колонки:
brR5Z9VSQMBkyA.jpg

Модели:
  • ProblemsOrgan - все органы
  • Problems - все проблемы


Делаю так:
public function getOrgans(){
        return $this->hasMany(ProblemsOrgan::className(), ['ID' => 'organ_id'])
                ->viaTable('problems_has_organ', ['organ_id' => 'ID']);
    }

Возвращается только 1 орган.

Как сделать связь, чтоб всё нормально работало?
По возможности объясните логику) Т.к. везде только общие объяснения.
Заранее спасибо.
  • Вопрос задан
  • 256 просмотров
Пригласить эксперта
Ответы на вопрос 2
@evilelf Автор вопроса
Тупой, руки из жопы, кодю за зп и т.п. и т.д.
Сделал так:
public function getOrgans(){
        return $this->hasMany(ProblemsOrgan::className(), ['ID' => 'organ_id'])
                ->viaTable('problems_has_organ',['problem_id'=>'ID']);
    }

Работает. Какие ещё есть способы?
Ответ написан
Комментировать
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Сделай три модели:
В Problems: $this->hasMany(ProblemsHasOrgan::className(), ['organ_id' => 'ID'])
В ProblemsHasOrgan: $this->hasOne(ProblemsOrgan::className(), ['ID' => 'problem_id'])
И все!
$problems = Problems->find()->with('ProblemsHasOrgan')->all();
foreach($problems->getProblemsHasOrgan->all() as $one)
{
echo $one->problemOrgan->name;
}
Ответ написан
Ваш ответ на вопрос

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

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