【问题标题】:Laravel Eloquent Query for two tablesLaravel Eloquent 查询两个表
【发布时间】: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)

【问题讨论】:

    标签: mysql laravel eloquent


    【解决方案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
      猜你喜欢
      • 2018-09-21
      • 2016-09-30
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 2019-07-21
      • 2017-11-28
      • 2014-10-31
      相关资源
      最近更新 更多