首页 > 解决方案 > Laravel 在 $from 和 $to 之间搜索日期不起作用

问题描述

在我的 Laravel-5.8 中,我有以下代码:

控制器:

if ($request->isMethod('post'))
{
    $from = $request->input('from');
    $to = $request->input('to');
    if ($request->has('search'))
    {
        // select search
        $searchReports = DB::table('hr_leave_requests AS lr')
            ->join('hr_leave_types AS lt', 'lr.leave_type_id', '=', 'lt.id')
            ->join('hr_employees AS em', 'lr.employee_id', '=', 'em.id')
            ->where('lr.leave_status', 4)
            ->where('lr.company_id', $userCompany)
            ->whereBetween('lr.commencement_date', [$from, $to])
            ->select('em.employee_code', DB::raw("CONCAT(em.first_name,' ',em.last_name) as full_name"), 'lr.commencement_date', 'lr.resumption_date', 'lr.no_of_days', 'lt.leave_type_name')
            ->get();

        return view('report.leave_reports.hr_leave_taken_by_date_report', ['searchReports' => $searchReports]);
    }

这是视图刀片:

<script type="text/javascript">
  // $(document).ready(function() {
  $(function() {
    $('.fromDate').datepicker({
      dateFormat: 'dd-mm-yy',
      changeMonth: true,
      changeYear: true,
      showAnim: 'slideDown',
      duration: 'fast',
      yearRange: new Date().getFullYear() + ':' + new Date().getFullYear(),
    });
  });
</script>
<form action="{{route('reports.leaveReport')}}" method="POST" class="form-horizontal" enctype="multipart/form-data">
  @csrf
  <div class="container">
    <div class="row">
      <label for="from" class="col-form-label">From:</label>
      <div class="col-md-3">
        <div class="input-group">
          <div class="input-group-prepend">
            <span class="input-group-text"><i class="far fa-calendar-alt"></i></span>
          </div>
          <input type="text" placeholder="dd/mm/yyyy" readonly autocomplete="off" name="from" class="form-control fromDate">
        </div>
      </div>
      <label for="from" class="col-form-label">To:</label>
      <div class="col-md-3">
        <div class="input-group">
          <div class="input-group-prepend">
            <span class="input-group-text"><i class="far fa-calendar-alt"></i></span>
          </div>
          <input type="text" placeholder="dd/mm/yyyy" readonly autocomplete="off" name="to" class="form-control fromDate">
        </div>
      </div>
      <div class="col-md-4">
        <button type="submit" class="btn btn-primary btn-sm" name="search">Search</button>
      </div>
    </div>
  </div>
</form>

路线:

Route::get('reports/leaveReport', 'LeaveReportsController@leaveReport')->name('reports.leaveReport');
Route::post('reports/leaveReport', 'LeaveReportsController@leaveReport')->name('reports.leave');

我正在使用JQuery UI datepickeramdcommencement_date和. 当我选择并提交时,我希望它根据所选日期进行过滤,但没有显示任何内容。$from$to$from$to

如果我删除$fromand$to并将其直接加载到视图刀片上,它可以正常工作。

我该如何解决这个问题?

谢谢

标签: laraveljquery-ui-datepicker

解决方案


确保您在输入和数据库之间使用相同的日期格式。日期格式必须与数据库表中定义的格式相似,否则您需要进行转换。

您可以像这样更改日期选择器格式:

$('.fromDate').datepicker({
    dateFormat: 'yy-mm-dd',
    // ..
}

或者,您可以使用 Carbon 库在控制器上转换日期格式。

$from = \Carbon::createFromFormat('d/m/Y', $request->input('from'))->format('Y-m-d');

推荐阅读