Не так давно начал изучать Yii2, столкнулся с проблемкой
Есть 3 таблицы (Связь многие ко многим).
Т.е есть товар и ингредиенты предположим и их связывает общая таблица.
В моделях прописал ...hasMany...->viaTable.... (соединил с связующей таблицей).
В контроллер приходит примерный запрос:
site.ru/category/type/ingr
Как выбрать все id пирогов, у которых ingr = (то что пользователю надо)
Yii2 запрос
Re: Yii2 запрос
Если заходить со стороны пирогов, то массив пирогов можно получить следующим образом:
В данном случае обязательно используется joinWith, жадная загрузка.
Или можно зайти с другой стороны и создать связь в модели ингридиентов от ингридиентов к пирогам. Например, если известен id начинки, можно вытащить привязанные к ней пироги.
При такой схеме сперва из Бд будет подтянута модель начинки, затем через связанную таблицу найдены все пироги с такой начинкой и подтянуты отдельным запросом по массиву ID пирогов.
Код: Выделить всё
// pieFilling -> связь через промежуточную таблицу, описанная в методе getPieFilling() модели Pie
$meatPies= Pie::find()->joinWith(['pieFilling'])->andWhere(['filling_name' => 'meat'])->all();
Или можно зайти с другой стороны и создать связь в модели ингридиентов от ингридиентов к пирогам. Например, если известен id начинки, можно вытащить привязанные к ней пироги.
Код: Выделить всё
// Находим начинку и через связь подцепляем пироги
$filling = Filling::find()->with('piesWithFilling')->andWhere(['filling_id' => 15])->one();
if(!empty($filling->piesWithFilling)){
//$pies - массив с объектами пирогами
$pies = $filling->piesWithFilling;
}
Re: Yii2 запрос
зачем? в задаче нужны были только id пирогов, связи там не нужны были.
Достаточно:
Код: Выделить всё
->joinWith(['pieFilling'], false)