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

是否可以将嵌套的 Where 分组在 laravel 上的 Eager 加载中与父级?

是否可以将嵌套的 Where 分组在 laravel 上的 Eager 加载中与父级?

PHP
ITMISS 2022-05-27 16:51:03
我一直在寻找一种方法来从 Laravel 的急切加载查询中对嵌套的 wheres 进行分组,假设我有 3 个模型, An Order, AReview和 a Product。为简单起见,Order有一个Review和一个Product。我想获取所有的orders数据和reviews丢失或丢失的数据(我可以在代码中对它们进行分组,没有问题)。但我还想检查登录的用户是下订单的人(在课堂上)还是产品的卖家(在课堂上)。productbuyer_rateseller_rateuser_idOrderuser_idProduct问题是我找不到方法告诉 Eloquent 我想要这个逻辑:('reviews'.'buyer_rate' != null OR 'reviews'.'seller_rate' != null) AND ('orders'.'user_id' == Auth::user()->id OR 'orders'.'producto'.'user_id' == Auth::user()->id)这是我的代码:(但我无法创建第二个条件组)我的条件失败,因为它不会计算两组之间的 AND 逻辑。$reviews = App\Order::with([    'review' => function ($q) {        $q->Where(function($query) { // Group Where buyer or seller's rate is missing.            $query->Where('buyer_rate', '!=', null);            $query->orWhere('seller_rate', '!=', null);        });    },    'producto' => function ($q) {        $q->select('id', 'user_id', 'nombre', 'precio', 'descripcion')        ->orWhere('user_id', Auth::user()->id);    },])->orWhere('user_id', Auth::user()->id)->get();
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

我认为您需要使用whereHas(反过来使用exists查询)。如果你只使用 with,你仍然会得到每一个Order。您只过滤哪些相关Review或Product急切加载。


使用whereHasor whereExists,您首先过滤Order模型,然后加载关系。


App\Order::where(function ($query) {

    $query->where('user_id', auth()->id())->orWhereHas('producto', function ($producto) {

        $producto->where('user_id', auth()->id());

    });

})

->whereHas('review', function ($review) {

    $review->whereNotNull('buyer_rate')->orWhereNotNull('seller_rate');

})

->with([

    'review',

    'producto' => function ($producto) {

        $producto->select('id', 'user_id', 'nombre', 'precio', 'descripcion');

    },

])

->get();

auth()->id()auth()->user()->id与或相同Auth::user()->id


查看完整回答
反对 回复 2022-05-27
  • 1 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号