Laravel 在 $from 和 $to date 之间搜索不起作用
Laravel Search Between $from and $to date not working
在我的 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]);
}
这是视图 blade:
<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');
我正在为 $from
和 $to
使用 JQuery UI datepicker
和 commencement_date
。当我 select $from
和 $to
提交时,我希望它根据 selected 日期进行过滤,但没有显示任何内容。
如果我删除 $from
和 $to
并将其直接加载到视图 blade,它工作正常。
我该如何解决这个问题?
谢谢
确保您在输入和数据库之间使用相同的日期格式。日期格式必须与数据库中定义的格式相似table否则需要转换。
您可以像这样更改日期选择器格式:
$('.fromDate').datepicker({
dateFormat: 'yy-mm-dd',
// ..
}
或者,您可以使用 Carbon 库在控制器上转换日期格式。
$from = \Carbon::createFromFormat('d/m/Y', $request->input('from'))->format('Y-m-d');
我这样做了:
$from = Carbon::createFromFormat('d-m-Y', $request->input('from'));
而且有效。
谢谢大家
在我的 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]);
}
这是视图 blade:
<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');
我正在为 $from
和 $to
使用 JQuery UI datepicker
和 commencement_date
。当我 select $from
和 $to
提交时,我希望它根据 selected 日期进行过滤,但没有显示任何内容。
如果我删除 $from
和 $to
并将其直接加载到视图 blade,它工作正常。
我该如何解决这个问题?
谢谢
确保您在输入和数据库之间使用相同的日期格式。日期格式必须与数据库中定义的格式相似table否则需要转换。
您可以像这样更改日期选择器格式:
$('.fromDate').datepicker({
dateFormat: 'yy-mm-dd',
// ..
}
或者,您可以使用 Carbon 库在控制器上转换日期格式。
$from = \Carbon::createFromFormat('d/m/Y', $request->input('from'))->format('Y-m-d');
我这样做了:
$from = Carbon::createFromFormat('d-m-Y', $request->input('from'));
而且有效。
谢谢大家