Laravel Eloquent检查多个orWhere语句,然后在两个日期之间进行排序

时间:2017-08-02 21:45:04

标签: php laravel-5 eloquent

我正在尝试运行一个查询,在该查询中,我找出一个人在两个日期之间的位置。以下是我到目前为止的情况:

$startDate = Carbon::parse($start)->toDateString();
      $endDate = Carbon::parse($end)->toDateString();

$user = Auth::id();

    $Positions = Position::whereBetween('shootDate', array($startDate, $endDate))->where('photographer_id', $user)->orWhere('photoEditor_id', $user)->orWhere('videographer_id', $user)
            ->orWhere('videoEditor_id', $user)->orWhere('scheduler_id', $user)->orWhere('drone_id', $user)->orWhere('webpage_id', $user)
            ->orWhere('flyer_id', $user)->orWhere('zillow_id', $user)->get();

我知道这不会起作用,因为orWhere语句基本上覆盖了whereBetween命令,但我不知道如何解决这个问题。

我需要获取两个日期之间的列表,然后查看用户是否持有任何这些职位,或者获取用户拥有的所有职位,然后只包括两个日期之间的职位。有谁知道我怎么能做到这一点?目前,此查询返回用户持有的所有头寸,即使是日期之外的头寸。

1 个答案:

答案 0 :(得分:1)

我从您的问题中了解到您需要像这样的查询

SELECT * 
FROM position
WHERE (
    photographer_id = $user OR
    photoEditor_id = $user OR
    videographer_id = $user OR
    videoEditor_id = $user OR
    scheduler_id = $user OR
    drone_id = $user OR
    webpage_id = $user OR
    flyer_id = $user OR
    zillow_id = $user
    ) AND
    shootDate BETWEEN $startDate AND $endDate

我用其他表做了一些测试,你可以尝试这样的事情

$Positions = Position::where(function($query){
            $query->where('photographer_id', $user);
            $query->orWhere('photoEditor_id', $user);
            $query->orWhere('videographer_id', $user);
            $query->orWhere('videoEditor_id', $user);
            $query->orWhere('scheduler_id', $user);
            $query->orWhere('drone_id', $user);
            $query->orWhere('webpage_id', $user);
            $query->orWhere('flyer_id', $user);
            $query->orWhere('zillow_id', $user);
        })
        ->whereBetween('shootDate', array($startDate, $endDate))
        ->get();

希望这有帮助!

我等你的反馈