Использую Laravel 4.2.
Я выбираю количество статей пользователя с помощью JOIN вот так:
User::join('pages as articles', 'articles.user_id', '=', 'users.id', 'left outer')->select([DB::raw('users.*, count(articles.id) as articlesCount')])->get()
В результате выбираются только те пользователи, у которых есть статьи.
Как выводить всех пользователей? Даже тех, у которых статей нет (нужно чтобы выводился ноль)?
Уточнение:
Есть таблица users:
И есть таблица pages, где хранятся статьи и вопросы пользователей:
Какие связи имеются:
public function publishedArticles()
{
return $this->hasMany('Page', 'user_id')->whereType(Page::TYPE_ARTICLE)
->whereIsPublished(1)
->where('published_at', '<', date('Y-m-d H:i:s'));
}
public function publishedQuestions()
{
return $this->hasMany('Page', 'user_id')->whereType(Page::TYPE_QUESTION)
->whereIsPublished(1)
->where('published_at', '<', date('Y-m-d H:i:s'));
}
Необходимо сделать выбор количества статей и вопросов пользователей в зависимости от заданного интервала времени. Чтобы по умолчанию выводились данные за весь период, и чтобы можно было отсортировать по времени создания статей и вопросов: за последний месяц, за конкретный месяц какого-то года и т.д.
Хотелось бы сделать это минимумом запросов в БД. В принципе, как реализовать, более-менее понятно, но получается очень много запросов.