laravel搜索日期不在查询之间

时间:2019-07-04 16:34:16

标签: laravel laravel-5 eloquent

我必须搜索具有给定日期和时间(早上和晚上)的数据。如何通过laravel查询从数据中找到可用日期? 如果我搜索日期 2019-06-10 2019-06-18 。它应该只返回ID 3和4。在此查询中,它返回ID 1、3和4。没有从日期之间进行检查的此查询有什么问题?我在数据库中有日期类型列作为开始和结束日期。 我想检查两个条件

  1. 给出的日期不应等于date_from和date_to
  2. 给出的日期不在这些日期之间

同一查询中的两个条件。希望你能理解。

self.type_parameters[veh_id]
id  event_id   date_from    date_to   

1     1        2019-06-08   2019-06-12  
2     1        2019-06-14   2019-06-16  
3     2        2019-06-20   2019-06-25  
4     3        2019-07-26   2019-07-27 

3 个答案:

答案 0 :(得分:1)

假设$endDate总是大于(或等于)$startDate

$startDate = "2019-06-10";
$endDate = "2019-06-18";
  
      
  1. 给出的日期不在这些日期之间
  2.   
        ->whereDate('date_to', '<', $startDate)
        ->whereDate('date_from', '>', $endDate)

如果给定的$startDate大于db 'date_to',则$startDate不在'date_to''date_from'之间。将检索'date_to'小于"2019-06-10"的记录。

当给定的'date_from'大于$endDate时,$endDate不在'date_to''date_from'之间。将检索'date_from'大于"2019-06-18"的记录。

  
      
  1. 给出的日期不应等于date_from和date_to
  2.   

这不是必需的,因为在第2点的查询中,我们使用>和<,这将不考虑等式。

    //->where('date_from', '<>', $startDate)->where('date_from', '<>', $endDate)
    //->where('date_to', '<>', $startDate)->where('date_to', '<>', $endDate)

只是:

$getEvents = Booking::where('category_id', '=', $categoryID)
            ->whereDate('date_to', '<', $startDate)
            ->whereDate('date_from', '>', $endDate)
            ->get();

答案 1 :(得分:0)

Laravel 5

$getEvents = Booking::where('category_id', '=', $categoryID)
                ->where('date_from', '<', $startDate)
                ->where('date_to', '>', $endDate)
                ->get();

答案 2 :(得分:0)

尝试一下

DB::table('table_name')
    ->whereNotBetween('date', [star_date, end_date])    
    ->get();