【问题标题】:How to get data between two date range?如何获取两个日期范围之间的数据?
【发布时间】:2019-04-15 06:03:33
【问题描述】:

我想从两个不同的日期范围内获取数据。我怎样才能做到这一点?我已经尝试并获得了开始日期的数据。

控制器

public function detail(Request $request,$id)
{
    if($request->startdate) {
        $advance =Advancepayment::where('date',$request->startdate)->get();
    } else {
        $advance = Advancepayment::all();
    }

    return view('admin.managesalary.detail',compact('advance'));
}

刀片文件

<form action="{{route('managesalary.detail',$user->id)}}" 
      method="GET" 
      class="form-horizontal"
>
    <div class="card-body">
        <h4 class="card-title">Search</h4>
        <div class="form-group">
            <!-- Date Picker -->
            <div class="input-group date " id="startDate">
                <strong>From</strong>
                <input 
                    type='date'
                    value="{{request()->startdate}}"
                    name="startdate"
                    class="form-control"
                />
            </div>
            <!-- Time Picker -->
            <div class="input-group date" id="startTime">
                <strong>To</strong>
                <input type='date'
                    value="{{request()->enddate}}"
                    name="enddate"
                    class="form-control"
                />
            </div>
        </div>
    </div>
    <br><br>
    <div class="border-top">
        <div class="card-body">
            <button type="submit" class="btn btn-success">Search</button>
            <a href="{{route('managesalary.detail',$user->id)}}"
               class="btn btn-md btn-danger"
            >
                Clear
            </a>
        </div>
    </div>
</form>

路线

Route::get('managesalary/detail/{id}',[
    'as' => 'managesalary.detail',
    'uses' => 'ManagesalaryController@detail'
]);

预期结果如下:

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    让我们的日期范围是从去年 15/04 到今年 15/04,代码会是这样的

    $from = date('2018-04-15');
    $to = date('2019-04-15');
    
    $advance = Advancepayment::whereBetween('date', [$from, $to])->get();
    

    如果有条件 $to 是空的,你可以放一个条件

    public function detail(Request $request,$id)
    {
        $from = $request->input('startdate');
        $to = $request->input('enddate');
        if ( empty($to) && empty($from) ) {
            $advance = Advancepayment::all();
        } elseif ( empty($to) && ! empty($from) ) {
            $advance = Advancepayment::where('date', $from)->get();
            // or Advancepayment::where('date', '>', $from)->get(); depending upon your requirmeent
        } else {
            $advance = Advancepayment::whereBetween('date', [$from, $to])->get();
        }
    }
    

    【讨论】:

      【解决方案2】:
      public function detail(Request $request,$id)
      {
      $startdate=$request->input('from');
      $enddate=$request->input('to');   
      if(!empty($request->startdate) && !empty($enddate)) {
          $advance =Advancepayment::whereBetween('date',[$startdate,$enddate])->get();
      } 
      else if(!empty($request->startdate) && empty($enddate))
      {
          $advance =Advancepayment::where('date','>=',$request->startdate)->get();
      
      }
      else
      {
          $advance = Advancepayment::all();
      }
      
      return view('admin.managesalary.detail',compact('advance'));
      }
      

      【讨论】:

        【解决方案3】:

        我已经创建了模型范围

        关于范围的更多信息

        代码:

            /**
             * Scope a query to only include the last n days records
             *
             * @param  \Illuminate\Database\Eloquent\Builder $query
             * @return \Illuminate\Database\Eloquent\Builder
             */
            public function scopeWhereDateBetween($query,$fieldName,$fromDate,$todate)
            {
                return $query->whereDate($fieldName,'>=',$fromDate)->whereDate($fieldName,'<=',$todate);
            }
        

        并且在控制器中,如果您使用 Carbon 库来处理日期,请将 Carbon 库添加到顶部

        use Carbon\Carbon;
        

        use Illuminate\Support\Carbon;
        

        从现在开始获取过去 10 天的记录

         $lastTenDaysRecord = ModelName::whereDateBetween('created_at',(new Carbon)->subDays(10)->toDateString(),(new Carbon)->now()->toDateString() )->get();
        

        从现在开始获取过去 30 天的记录

         $lastThirtyDaysRecord = ModelName::whereDateBetween('created_at',(new Carbon)->subDays(30)->toDateString(),(new Carbon)->now()->toDateString() )->get();
        

        所以对于你的情况:

        $recordResults = ModelName::whereDateBetween('filedName','2019-04-10','2019-04-12')->get();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-20
          • 2020-07-25
          • 2019-03-24
          • 1970-01-01
          • 1970-01-01
          • 2013-09-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多