似乎无法理解正确的逻辑。我有一个需要 2 个日期($date 1 和 $date 2)的函数。我有事件的数据库记录,也有 2 个日期(starting_at 和 ending_at)。
我想获取与 $date 1 和 $date 2 之间的时间完全或部分重叠的所有事件。我已经浏览了其他类似的主题并提出了这个......但我有一种感觉,这是不正确的。
$events = Event::with(['user']);
$events->where(function($query) use ($date1,$date2) {
$query->where(function($query) use ($date2) {
$query->where('starting_at', '<=', $date2);
});
$query->where(function($query) use ($date1) {
$query->where('ending_at', '>=', $date1);
});
});
如果日期位于同一表中,请使用:
$events = Event::with('user')
->where('starting_at', '<=', $date2)
->where('ending_at', '>=', $date1)
->get();
确保已将starting_at
和ending_at
添加到dates
数组:
protected $dates = ['starting_at', 'ending_at'];
使用 Laravel 5.3(也许是 5.2,但肯定是 5.3),您可以执行以下操作:
$events = $events->whereBetween($date1, $date2)->get();
较低的版本可能是:
$events = $events->where('starting_at', '<=', $date2)
->where('ending_at', '>=', $date1)
->get();
> Laravel有一个简单的方法可以做到这一点。
$events = Event::with(['user'])->whereBetween('field_name', array($date1, $date2))->get();
在此处查看文档 https://laravel.com/docs/5.3/queries#where-clauses
更新
如果date1
和date2
来自数据库上完全不同的列,那么请参考@Alexey更合适的Mezenin答案。