Laravel 6 Eloquent Query, используя WHERE с AND ИЛИ AND? - PullRequest
0 голосов
/ 16 марта 2020

Я хочу показать рестораны, которые в настоящее время открыты. Как мне сказать в laravel:

WHERE (open = '00:00:00' and close = '00:00:00' ) OR (open < $currentTime and close > $currentTime)

Я пишу это так:

->where(function ($query) {
    $query->where('owh.open', '=', '00:00:00')
          ->whereAnd('owh.close', '=', '00:00:00');
})->orWhere(function ($query) use ($currentTime) {
    $query->where('owh.open', '<', $currentTime)
          ->whereAnd('owh.close', '>', $currentTime);
})

, но это не дает мне правильных данных.

Ответы [ 3 ]

0 голосов
/ 16 марта 2020

Используйте ниже

->where(function ($query) {
    $query->where('owh.open', '=', '00:00:00')
        ->where('owh.close', '=', '00:00:00');
})->orWhere(function ($query) use ($currentTime) {
    $query->where('owh.open', '<', $currentTime)
        ->where('owh.close', '>', $currentTime);
})
0 голосов
/ 17 марта 2020

Я нашел ответ на свой вопрос

->whereIn('objects.id', [
            DB::raw("SELECT object_id FROM (SELECT object_id,
                   (CONCAT('$date', ' ', open)::timestamp) as open,
                   (
                        CASE WHEN open > close THEN
                            (CONCAT('$date', ' ', close)::timestamp + interval '1' day)
                        ELSE (CONCAT('$date', ' ', close)::timestamp) END
                    )
                    as close
            FROM object_work_hours WHERE type=$currentWorkHourType AND deleted_at IS NULL) as tb1 WHERE '$currentDate'::timestamp BETWEEN open AND close OR (open::time = '00:00:00' AND close::time = '00:00:00')")
        ])

Есть

$currentWorkHourType = date('N');
$currentDate = Carbon::now()->format('Y-m-d H:i:s');
$date = date('Y-m-d');
0 голосов
/ 16 марта 2020

Используйте это

->where(function ($query) {
    $query->where('owh.open', '=', '00:00:00')
          ->where('owh.close', '=', '00:00:00');
})->orWhere(function ($query) use ($currentTime) {
    $query->where('owh.open', '<', $currentTime)
          ->where('owh.close', '>', $currentTime);
})
...