繁体   English   中英

在 laravel 中的 where 条件下使用数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM