sha*_*nex 3 php laravel eloquent laravel-5
我有一个booked带有start和end列的表作为日期戳;
我知道
$start = "2015-07-12 01:00:00";
$end = "2015-07-12 02:00:00";
$users = DB::table('booked')
->whereBetween('start', [$start, $end])->get();
Run Code Online (Sandbox Code Playgroud)
检查start列中是否包含$ start和$ end内的任何日期。
我想要的实际上是另一种方式。
在检查$ start和$ end日期变量在表中的start和end列中出现时遇到困难book。
请在给定的代码下尝试,这将检查请求的日期时间是否已经预订,如果预订了任何时间段,则返回 1 否则返回 0 :
$start = $request->start_date;
$end = $request->end_date;
DB::table('booked')->where(function ($query) use ($start, $end) {
$query->where(function ($q) use ($start, $end) {
$q->where('start', '>=', $start)
->where('start', '<', $end);
})->orWhere(function ($q) use ($start, $end) {
$q->where('start', '<=', $start)
->where('end', '>', $end);
})->orWhere(function ($q) use ($start, $end) {
$q->where('end', '>', $start)
->where('end', '<=', $end);
})->orWhere(function ($q) use ($start, $end) {
$q->where('start', '>=', $start)
->where('end', '<=', $end);
});
})->count();
Run Code Online (Sandbox Code Playgroud)
// make sure $from is before $till, because they are probably provided as input
$from = min($start, $end);
$till = max($start, $end);
// then simply
DB::table('booked')
->where('start', '<=', $from)
->where('end', '>=', $till)
->get();
Run Code Online (Sandbox Code Playgroud)
它将返回与$from-$tillperiod中包含的start-endperiod 相匹配的行:
start end
|------------------------|
|----------------|
$from $till
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5811 次 |
| 最近记录: |