Здравствуйте.
Не могу решить следующий вопрос. Есть модель со связью. Необходимо вывести в виджете только по 10 последних записей из связи. Я так понял что limit в связях не работает.
Пример:
1. Категории новостей, 5 штук
2. Новости в виде связи к категории(нужно только последние 10 новостей с сортировкой по ID)
2.1. Комментарии к новости в виде связи к новости. Прописано в модели новости.
2.2. Картинки новости в виде связи к новости. Прописано в модели новости.
Необходимо при выводе категорий вывести только последние 10 новостей из связи.
Делаю это так в модели:
В виджете:
$models = Yii::$app->db->cache(function (Connection $db) {
return Categories::find()
->alias('cat')
->select('cat.id, cat.name, cat.alias, cat.status')
->with('news')
->where(['cat.id' => [1,2,3,4,5])
->andWhere('cat.status = :cat_status', ['cat_status' => 1])
->orderBy([
new Expression(sprintf("FIELD(cat.id, %s)", implode(",", [1,2,3,4,5])))
])
->all();
});
В модели категории указываю связь так:
public function getNews()
{
return $this->hasMany(News::className(), ['category_id' => 'id'])
->alias('new')
->select('new.*')
->with(['comments, 'photos',])
->where('new.status != :new_status', ['new_status' => 9])
->orderBy(['new.id' => SORT_DESC])
->limit(10);
}
В view вывожу всё это так:
<?php foreach($model_category->news as $key => $item) : ?>
// Выводим новости категории и связанные данные для них
<?php endforeach; ?>
Это работает, но не работает параметр limit 10 т.к. он действует на общее количество новостей которое выводится, а не для каждой категории как хотелось бы. В итоге получаем что в первой категории 3 новости, во второй 5 и так далее.
Если в модель категории добавляю ещё одну функцию в которой указываю limit(10), то всё начинает работать как надо, но запросов становится на 35-55 больше т.к. функция дёргает это при каждом проходе foreach.
public function getNewsCategory($items = 10)
{
return $this->getNews()->limit($items)->all();
}
Заранее спасибо за ответы и советы.