Laravel Eloquent 查询两个表

Posted

技术标签:

【中文标题】Laravel Eloquent 查询两个表【英文标题】:Laravel Eloquent Query for two tables 【发布时间】:2021-04-19 14:52:41 【问题描述】:

我有两张表,我想用计数进行一个查询。 我的第一个表名是 orders 字段:

product_id quantity
1 1
2 1
1 2
1 1
2 1

我的第二张表是items 如下字段:

id product_id price
1 1 2.99
2 2 3.99
3 1 1.99
4 1 5.99

如您所见,产品 ID:1 有更多订单,但在商品表中产品 ID 1 有 3 个价格,我想获得具有更多订单且价格最低的 product_id。

我的查询如下

Items::->withCount(['orders' => function($q)
            $q->active();
        ])
        ->orderBy('orders_count', 'desc')
        ->groupBy('product_id')
        ->limit(1)->get();

我得到的商品订单更多,但第一个记录的价格为 2.99,但我想获得第三个记录的价格为 1.99(其相同的 product_id)

【问题讨论】:

【参考方案1】:

我猜一个简单的原始选择会返回预期的结果

Items::withCount(['orders' => function($q)
            $q->active();
        ])
        ->select(['product_id', DB::raw('min(price) as lowest_price')])
        ->orderBy('orders_count', 'desc')
        ->groupBy('product_id')
        ->limit(1)
        ->get();

【讨论】:

【参考方案2】:

我认为您可以在查询中使用另一个 orderBy 函数来获得最低价格。 也许下面的代码可以工作!

Items::->withCount(['orders' => function($q)
            $q->active();
        ])
        ->orderBy('orders_count', 'desc')
        ->orderBy('price' , 'asc')
        ->groupBy('product_id')
        ->limit(1)->get();

注意:此语法适用于 laravel 7 或更高版本

【讨论】:

对不起,但它不工作......我的应用程序处于 larval 5.7

以上是关于Laravel Eloquent 查询两个表的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent - 查询数据透视表

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

如何在 Laravel 中使用多表查询而不使用 Eloquent 关系

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

如何在 Laravel 中定义 Eloquent 关系

如何在laravel eloquent中为左连接表起别名