写得不是雄辩的地方

时间:2018-11-21 13:33:44

标签: php laravel eloquent

我想在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

]

预先感谢

4 个答案:

答案 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();