Не могу решить следующий вопрос. Есть модель со связью.
Необходимо вывести в виджете только по 10 последних записей из связи.
Пример:
1. Категории новостей, 5 штук
2. Новости в виде связи к категории(нужно только последние 10 новостей с сортировкой по ID)
2.1. Комментарии к новости в виде связи к новости. Прописано в модели новости.
2.2. Картинки новости в виде связи к новости. Прописано в модели новости.
Необходимо при выводе категорий вывести только последние 10 новостей из связи.
В виджете:
Код: Выделить всё
$models = 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])
->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);
}
Код: Выделить всё
<?php foreach($model_category->news as $key => $item) : ?>
// Выводим новости категории и связанные данные для них
<?php endforeach; ?>
Если в модель категории добавляю ещё одну функцию в которой указываю limit(10), то всё начинает работать как надо, но запросов становится на 35-55 больше т.к. функция дёргает это при каждом проходе foreach.
Код: Выделить всё
public function getNewsCategory($items = 10)
{
return $this->getNews()->limit($items)->all();
}