我想在laravel 5.6应用程序中使用雄辩的语言编写此SQL
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查询,除了 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
]
预先感谢
答案 0 :(得分:1)
我认为kapitan最接近,但应该是这样吗?
LockDate::whereDate('start_at' , '<' , $end)
->whereDate('end_at' , '>' , $start)
->get();
这就像检查您的not
请求,因为日期是相反的。
答案 1 :(得分:0)
要用口才写NOT
,请在!=
子句中使用=
而不是WHERE
。
它看起来像这样:
`LockDate::where('start_at' , '!=' , $end)->get();`
答案 2 :(得分:0)
实际上有一个whereDate()用于雄辩的日期过滤。
LockDate::whereDate('start_at' , '>=' , $end)
->whereDate('end_at' , '<=' , $start)
->get();
答案 3 :(得分:0)
实际上,您不需要“不”,即您的病情:
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();