使用第一个请求作为where子句在Eloquent中嵌套请求

时间:2019-05-10 13:27:52

标签: laravel eloquent

我有一个名为Campaign的模型,该模型属于其他两个模型“ Client”和“ Coupon”。

现在,我需要根据campaignId查找具有该ID的广告系列,还要查找具有相同clientId的其他广告系列。

我能够处理2个请求并合并结果,但是我很确定可以在单个请求中完成。

以防万一,这是我的2个请求:

$couponDetails = Campaign::with(['coupon', 'client'])
                    ->where('uuid', '=', $campaignId)
                    ->get()
                    ->all();

$extraCoupon = Campaign::with(['coupon', 'client'])
                    ->where('client_id', '=', $couponDetails[0]->client_id)
                    ->whereNotIn('uuid', [$couponDetails[0]->uuid])
                    ->get()
                    ->all();

我想我应该在campaignId上执行嵌套选择,然后在clientId上执行where子句,但是我找不到正确的语法。

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

laravel中的orWhere有一个选项,它将为您提供以下信息:

$coupons = Campaign::with(['coupon', 'client'])
    ->where(function($query) use ($campaignId){
        $query->where('uuid', '=', $campaignId);
    })
    ->orWhere(function($query) use ($couponDetails){
        $query->where('client_id', '=', $couponDetails[0]->client_id)
              ->whereNotIn('uuid', [$couponDetails[0]->uuid]);
    })
    ->get()
    ->all();