Laravel Eloquent 查询,带有连接、计数和分组依据

Posted

技术标签:

【中文标题】Laravel Eloquent 查询,带有连接、计数和分组依据【英文标题】:Laravel Eloquent query with join, count and group by 【发布时间】:2022-01-08 03:17:56 【问题描述】:

我正在尝试重新制作此查询:

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->belongsTo(User::class);


public function post()

    return $this->belongsTo(Post::class);


public function manager()

    return $this->belongsTo(User::class, 'manager_id');

当我使用像 Order::all() 这样的简单查询时,它可以正常工作,但我尝试调用它:

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

当然,Laravel 不知道我应该使用用户名还是管理员名,因为它与 Order 中的 users 表是两个关系。我应该如何正确编写上面的查询?

【问题讨论】:

【参考方案1】:
 return Order::groupBy('users.id')
        ->select(DB::raw('COUNT(orders) AS TOTAL_ORDERS'))
        ->addSelect('name')
        ->get();

你可以数数 DB:raw 我认为它对你有用。

【讨论】:

以上是关于Laravel Eloquent 查询,带有连接、计数和分组依据的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4,凌乱的 Eloquent 连接查询

Laravel 带计数的多重连接(不是 Eloquent)

如何将左连接横向 SQL 查询转换为 Laravel Eloquent 查询?

用 Laravel/Eloquent 为 Yajra DataTables 编写连接查询的慢 MySQL

Laravel 6,MYSQL - 如何使用 Laravel Querybuilder 或 Model Eloquent 将子查询与 GroupBY 左连接?

使用 Laravel 的查询构建器或 Eloquent 将一个表与一个临时表进行内部连接