Допустим у меня есть таблицы article и comments. Соответственно к каждой статье может быть много комметариев. В модели статьи явно описано отношение comments (есть метод getComments возвращающий запрос). Я делаю выборку Article::find()->with('comments')->all() (там возможно есть еще какие-то условия, но я опущу их для примера) чтобы как-то обработать эти статьи и комментарии. Но вот что мне не нравится: мне от комментариев нужно лишь их количество для каждой статьи. Я конечно могу убрать with и сделать просто для каждой статьи подзапрос комментариев, но это сильно удлинняет все. Я бы хотел чтобы у меня именно вот так же жадно подгружалось количество комментариев. Т.е. я бы написал примерно такой селект:
Код: Выделить всё
select a.id, count(c.id) as count
from articles a
join article_comments c on c.article_id = a.id
where article_id in (1, 2, 3)
group by a.id
P.S. Уже предчувствую крики "где код" (хотя вроде и так все понятно). Упрощенно вот:
Код: Выделить всё
/**
* @property integer $id
* @property integer $article_id
*/
class Comment extends ActiveRecord {
}
/**
* @property integer $id
* @property string $name
*
* @property-read Comment[] $comments
*/
class Article extends ActiveRecord {
public function getComments() {
return $this->hasMany(Comment::class, ['article_id' => 'id']);
}
}
Последний раз редактировалось
Brainfuck 2018.07.26, 17:15, всего редактировалось 1 раз.