Добрый день.
Подскажите, как вывести список категорий с количеством материалов в каждой категории? пример на картинке
Связь один ко многим.
Остановился на $query = Category::find()->all()
Категори с количеством материалов каждой
Категори с количеством материалов каждой
- Вложения
-
- cat.jpg (27.76 КБ) 2066 просмотров
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Категори с количеством материалов каждой
Код: Выделить всё
select c.*, count(p.id)
from category c left join posts p on p.category_id = c.id
group by c.id
Нравится Yii? Давайте сделаем его лучше!.
Re: Категори с количеством материалов каждой
Спасибо за ответ.
Я, наверно, не в тот раздел написал. Извиняюсь за тупые вопросы, подскажите, пожалуйста, на пальцах версию для yii2, кому не трудно.
У меня две модели (news и category). Один ко многим.
Для yii1 нашел туториал http://www.yiiframework.com/doc/guide/1 ... .arr#sec-9, как сделать подобное на yii2 не представляю
Я, наверно, не в тот раздел написал. Извиняюсь за тупые вопросы, подскажите, пожалуйста, на пальцах версию для yii2, кому не трудно.
У меня две модели (news и category). Один ко многим.
Код: Выделить всё
public function getNews()
{
return $this->hasMany(News::className(), ['category_id' => 'id']);
}
public function getCategory()
{
return $this->hasOne(Category::className(), ['id' => 'category_id']);
}
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Категори с количеством материалов каждой
Много способов:
1. Сделать через query builder.
2. Сделать SQL view и выбирать из него.
3. Добавить поле в модель, выбрать count(n.id) as news_count.
4. ...
1. Сделать через query builder.
2. Сделать SQL view и выбирать из него.
3. Добавить поле в модель, выбрать count(n.id) as news_count.
4. ...
Нравится Yii? Давайте сделаем его лучше!.
Re: Категори с количеством материалов каждой
Код: Выделить всё
$sql = 'select c.*, count(n.id) as newscount
from category c left join news n on n.category_id = c.id
group by c.id';
$categories = Category::findBySql($sql)->asArray()->all();
foreach ($categories as $cat) {
echo $cat['title'].': '.$cat['newscount'].'</br>';
}
Re: Категори с количеством материалов каждой
$cat->title и $cat->newscount соответсвенно