[英]using array in where condition in laravel
我正在使用 laravel 6.我想使用我的日程安排中的时间限制。 限制变量是包含多个字符串数据的数组。
$bus = BusSchedule::where([
['datetime', '>=', $start_datetime],
['datetime', '<=', $end_datetime]
])
->get()
->pluck('course_id')
->toArray();
在 start_datetime 和 end_datetime 变量中,我有多个日期时间,例如 ['2020-12-12 16:05:00','2020-12-11 13:05:00']
它应该是。 start_datetime 和 end_datetime 是用户输入的动态数组
$bus = BusSchedule::where([
['datetime', '>=', ['2020-12-12 16:05:00' ,'2020-12-11 13:05:00']],
['datetime', '<=', ['2020-12-12 18:05:00' ,'2020-12-11 15:05:00']]
])
->get()
->pluck('course_id')
->toArray();
但我得到数组第一个索引的值,其他的不工作
我认为对于日期和“>=”或“<=”,您可以只使用输入数组的最小值/最大值。 因为您不关心两者之间的精确值,您只需要一个范围,尤其是如果您想要列出用户选择日期之间的所有结果。
所以你的代码会是这样的:
$bus = BusSchedule::whereBetween('datetime', [
min(Carbon::create('2020-12-12 18:05:00') ,Carbon::create('2020-12-11 15:05:00')),
max(Carbon::create('2020-12-12 16:05:00') ,Carbon::create('2020-12-11 13:05:00'))
])
->get()
->pluck('course_id')
->toArray();
如果你只想要匹配所有日期的结果,就好像你对每个值做多个 wheres,你可以在 max(start_dates) 和 min(end_dates) 之间使用
但是,如果您想要位于那些选定日期之间的任何结果,您可以在 min(start_dates) 和 max(end_dates) 之间使用。
这将包括所有选项
当你想要精确的值时,你可以使用whereIn
有关 laravel 中选择的更多信息: https://laravel.com/docs/6.x/queries#selects
有关 Carbon 中 min 的更多信息: https://carbon.nesbot.com/docs/#api-comparison
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.