Категори с количеством материалов каждой

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Arroyo
Сообщения: 104
Зарегистрирован: 2014.11.29, 11:24

Категори с количеством материалов каждой

Сообщение Arroyo »

Добрый день.
Подскажите, как вывести список категорий с количеством материалов в каждой категории? пример на картинке
Связь один ко многим.
Остановился на $query = Category::find()->all() :)
Вложения
cat.jpg
cat.jpg (27.76 КБ) 1292 просмотра

Аватара пользователя
samdark
Администратор
Сообщения: 9362
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Категори с количеством материалов каждой

Сообщение samdark »

Код: Выделить всё

select c.*, count(p.id)
from category c left join posts p on p.category_id = c.id
group by c.id

Arroyo
Сообщения: 104
Зарегистрирован: 2014.11.29, 11:24

Re: Категори с количеством материалов каждой

Сообщение Arroyo »

Спасибо за ответ.
Я, наверно, не в тот раздел написал. Извиняюсь за тупые вопросы, подскажите, пожалуйста, на пальцах версию для 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']);
    } 
Для yii1 нашел туториал http://www.yiiframework.com/doc/guide/1 ... .arr#sec-9, как сделать подобное на yii2 не представляю

Аватара пользователя
samdark
Администратор
Сообщения: 9362
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Категори с количеством материалов каждой

Сообщение samdark »

Много способов:

1. Сделать через query builder.
2. Сделать SQL view и выбирать из него.
3. Добавить поле в модель, выбрать count(n.id) as news_count.
4. ...

Arroyo
Сообщения: 104
Зарегистрирован: 2014.11.29, 11:24

Re: Категори с количеством материалов каждой

Сообщение Arroyo »

Код: Выделить всё

$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>';
}
Подскажите, как без asArray() вывести title и newscount ?

Аватара пользователя
PaSiS
Сообщения: 88
Зарегистрирован: 2011.11.15, 18:07
Контактная информация:

Re: Категори с количеством материалов каждой

Сообщение PaSiS »

$cat->title и $cat->newscount соответсвенно

Ответить