@MarkLb

Как сделать relative-выборку через with AR Yii2?

Здравствуйте! Допустим, нужно вывести данные по категории новостей в ассоциативном массиве, но и также сами новости, но по конкретной категории.
Т.е. код должен быть вида:
$category = 1;
CategoryNews::find()->where(['category' => $category])->with('news')->asArray()->all();


Но как сделать фильтр новостей через with? По-сути, можно настроить фильтрацию в самой связи, но как передать на неё аргумент?
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Arik
Если связи правильно настроены, то каждая новость уже привязана к конкретной категории. Если нужно дополнительные условия добавить, то можно (пример из доков):
// найти покупателей и получить их вместе с их странами и активными заказами
// SELECT * FROM `customer`
// SELECT * FROM `country` WHERE `id` IN (...)
// SELECT * FROM `order` WHERE `customer_id` IN (...) AND `status` = 1
$customers = Customer::find()->with([
    'country',
    'orders' => function ($query) {
        $query->andWhere(['status' => Order::STATUS_ACTIVE]);
    },
])->all();
Ответ написан
Комментировать
@iSensetivity
бухгалтер, програміст-самоук
$category = 1;
CategoryNews::find()
->JoinWith('news')
->where(['category' => $category])
->andWhere([News::tableName() . '.news_field' => 1])
->asArray()
->all();
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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