Красноречивый запрос Laravel с объединением, подсчетом и группировкой по

#laravel #eloquent

Вопрос:

Я пытаюсь переделать этот запрос:

 return DB::select(DB::raw("SELECT COUNT(orders.id), name FROM orders JOIN users ON orders.manager_id = users.id GROUP BY users.id"));  

У меня есть Order модель, которая имеет ссылки на другие таблицы с использованием belongsTo() метода, их несколько:

 public function user() {  return $this-gt;belongsTo(User::class); }  public function post() {  return $this-gt;belongsTo(Post::class); }  public function manager() {  return $this-gt;belongsTo(User::class, 'manager_id'); }  

Когда я использую простые запросы, такие как Order::all() это работает нормально, но я пытался назвать это:

 return Order::groupBy('users.id')  -gt;selectRaw('COUNT(orders.id), name')  -gt;get();  

Конечно, Laravel не знает, должен ли я использовать имя пользователя или имя менеджера, поскольку это два отношения с users таблицей Order в. Как я должен правильно написать приведенный выше запрос?

Ответ №1:

 return Order::groupBy('users.id')  -gt;select(DB::raw('COUNT(orders) AS TOTAL_ORDERS'))  -gt;addSelect('name')  -gt;get();  

Вы можете рассчитывать с помощью DB:raw, я думаю, это сработает для вас.