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 为 Yajra DataTables 编写连接查询的慢 MySQL
如何在 Laravel 中使用多表查询而不使用 Eloquent 关系