пиши где не красноречиво - PullRequest
0 голосов
/ 21 ноября 2018

Я хочу написать этот SQL, используя eloquent в приложении laravel 5.6

select * from `lock_dates` where not (`start_at` >= '2018-11-25 23:59:59' or `end_at` <= '2018-11-21 00:00:00')

Я не знаю, как писать , а не !

на данный момент это мой красноречивый код

LockDate::where('start_at' , '>=' , $end)
          ->orWhere('end_at' , '<=' , $start)
          ->get();

это запрос SQL, который красноречиво выполняется за кулисами, тот же SQL, с которым я хочу, кроме not

0 => array:3 [▼
"query" => "select * from lock_dates where start_at >= ? or end_at <= ?"
"bindings" => array:2 [▼
  0 => "2018-11-25 23:59:59"
  1 => "2018-11-21 00:00:00"
]
"time" => 1.98

]

заранее спасибо

Ответы [ 4 ]

0 голосов
/ 21 ноября 2018

Я думаю, что Капитан ближе всего, но должно быть так?

LockDate::whereDate('start_at' , '<' , $end)
          ->whereDate('end_at' , '>' , $start)
          ->get();

Это похоже на проверку вашего запроса not, потому что даты поменялись местами.

0 голосов
/ 21 ноября 2018

фактически есть whereDate () для фильтрации красноречивых дат.

LockDate::whereDate('start_at' , '>=' , $end)
          ->whereDate('end_at' , '<=' , $start)
          ->get();
0 голосов
/ 21 ноября 2018

На самом деле вам не нужно "не", ваше состояние:

not (`start_at` >= '2018-11-25 23:59:59' or `end_at` <= '2018-11-21 00:00:00')

равно:

`start_at` <= '2018-11-25 23:59:59' AND `end_at` >= '2018-11-21 00:00:00'

Итак:

$lockDates = LockDate::where('start_at' , '<=' , $end)
    ->where('end_at' , '=>' , $start)
    ->get();
0 голосов
/ 21 ноября 2018

Чтобы написать NOT в Eloquent, используйте != вместо = в предложении WHERE.

Это будет выглядеть так:

`LockDate::where('start_at' , '!=' , $end)->get();`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...