【问题标题】:Get data after start date laravel在开始日期之后获取数据 laravel
【发布时间】:2021-02-15 10:24:42
【问题描述】:

我正在使用以下查询来获取存在于start dateend date 之间的记录:

$event =Event::whereBetween('date', [
        $request->start_date, $request->end_date
    ])->orderBy('date', 'desc')->paginate(5);

这在我提供开始日期和结束日期时有效,但是当我只提供开始日期时,我没有得到任何记录 - 但如果保留结束日期,我希望记录在开始日期之后存在空白。

有什么建议吗?

【问题讨论】:

    标签: laravel laravel-5 eloquent


    【解决方案1】:

    Laravel 为这个用例提供了Conditional Clauses

    $events = Event::query()
        ->when(
            $request->has('start_date') && $request->has('end_date'), 
            function($query, $request) {
                return $query->whereBetween('date', [
                    $request->start_date, $request->end_date
                ]);
            }, 
            function($query, $request) {
                return $query->where('date', ' >=', $request->start_date);
            }
        )
        ->orderBy('date', 'desc')
        ->paginate(5);
    

    【讨论】:

      【解决方案2】:

      @babak-asharfi 的回答中的两种选择

      使用when()

      
      $event = Event::when($request->end_date, 
          function($query) use ($request) {
              $query->whereBetween('date', $request->start_date, $request->end_date);
          },
          function($query) use ($request){ 
              $query->where('date', '=>', $request->start_date);
          }
      )->orderBy('date', 'desc')->paginate(5);
      

      或者干脆使用后备日期

      $event = Event::whereBetween('date', [
              $request->start_date, $request->end_date ?: '2999-12-31'
          ])->orderBy('date', 'desc')->paginate(5);
      
      

      【讨论】:

        【解决方案3】:

        你可以使用下面的代码

        $query = Event::query();
                    if ($request->has('start_date')){
                       $query->whereBetween('date', [
                           $request->start_date, $request->end_date
                       ]) 
                    }else{
                        $query->where('date', '>=', $request->start_date) 
                    }
                    $query->orderBy('date', 'desc')->paginate(5);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多