为了账号安全,请及时绑定邮箱和手机立即绑定

如果关系有数据,Laravel Eloquent Model 返回数据

如果关系有数据,Laravel Eloquent Model 返回数据

PHP
蛊毒传说 2023-09-22 16:40:50
美好的一天,我正在尝试从 Eloquent 模型返回具有关系的数据。有没有办法(跳过/不返回)关系返回空数组作为结果的订单? Order::with(['products' => function ($query) {        $query->whereHas('progress', function ($query) {            $query->where('progress_id', 30)->orWhereBetween('progress_id', [60, 90]);        });        $query->whereHas('product', function ($query) {            $query->where('vendor_id', 3);        })->with(['product' => function ($query) {            $query->select('id', 'identifier', 'reference', 'shipping_id');        }]);        $query->select('id', 'order_id', 'product_id', 'quantity');    }])        ->whereHas('products')        ->where('status_id', '=', 15)        ->select('orders.id', 'orders.customer_id', 'orders.created_at')        ->get();因此,在这种情况下,我不想收到该订单,因为没有包含该订单的产品。另外,我不明白为什么我什至会得到结果,其中有 status_id = 15 的订单,但没有供应商_id = 3 的订单。该怎么做?感谢您的阅读。
查看完整描述

3 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

尝试这个:


Order::whereHas('products' => function ($query) {

        $query->whereHas('progress', function ($query) {

            $query->where('progress_id', 30)->orWhereBetween('progress_id', [60, 90]);

        });

        $query->whereHas('product', function ($query) {

            $query->where('vendor_id', 3);

        });

        // $query->select('id', 'order_id', 'product_id', 'quantity'); // This line will cause error

    }])->with(['products', 'products.product:id,identifier,reference,shipping_id,vendor_id'])

       ->where('status_id', 15)

       ->get();


查看完整回答
反对 回复 2023-09-22
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

尝试这个


Order::whereHas('products')->with(['products' => function ($query) {

        $query->whereHas('progress', function ($query) {

            $query->where('progress_id', 30)->orWhereBetween('progress_id', [60, 90]);

        });

        $query->whereHas('product', function ($query) {

            $query->where('vendor_id', 3);

        })->with(['product' => function ($query) {

            $query->select('id', 'identifier', 'reference', 'shipping_id');

        }]);

        $query->select('id', 'order_id', 'product_id', 'quantity');

    }])->where('status_id', '=', 15)

        ->select('orders.id', 'orders.customer_id', 'orders.created_at')

        ->get();


查看完整回答
反对 回复 2023-09-22
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

让我们试试这段代码:

Order::has('product', '>=', 1)->get();


查看完整回答
反对 回复 2023-09-22
  • 3 回答
  • 0 关注
  • 60 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信