#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, я думаю, это сработает для вас.