【问题标题】:Laravel Query Builder get only item with specific progressLaravel 查询生成器仅获取具有特定进度的项目
【发布时间】:2020-11-26 08:57:40
【问题描述】:

您好,我正在尝试获得具有特定产品进度的产品的订单。

我的 Laravel 查询如下所示:

return Order::whereHas('products.progress', function (Builder $query) {
    $query->where('progress_id', 100)
        ->orWhereBetween('progress_id', [160, 240]);
      })
    ->with('products.progress')
    ->select('orders.id', 'orders.customer_id', 'orders.created_at')
    ->get();

在查询中,我设置了 where 和 whereBetween,最后一个 Product 的 progress_id 50 不应加载到订单中。

怎么做?感谢您阅读。

【问题讨论】:

    标签: php mysql laravel eloquent laravel-query-builder


    【解决方案1】:

    我想你想Constraining Eager Loads

    所以你的(哪里)应该在加载中......

    return Order::with(['products'=>function($query){
            $query->whereHas('progress',function ($query){
                $query->where('progress_id', 100)
                    ->orWhereBetween('progress_id', [160, 240]);
            })->with('progress');
        }])
            ->select('orders.id', 'orders.customer_id', 'orders.created_at')
            ->get();
    

    【讨论】:

    • 您好OMR,感谢您的回复我已经尝试了您的解决方案,它只是不显示进度关系。产品本身仍在订单中。
    • 非常感谢 OMR,您的解决方案是正确的,非常有帮助。
    猜你喜欢
    • 2016-11-07
    • 2018-02-16
    • 2018-11-15
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 2017-12-02
    • 2017-05-22
    相关资源
    最近更新 更多