#php #laravel #mongodb #eloquent
#php #laravel #mongodb #красноречивый
Вопрос:
На моей странице запроса на отпуск у меня есть одна строка поиска в столбце продолжительность отпуска, в столбце продолжительность отпуска указаны даты, первая — дата начала отпуска, а вторая — дата окончания отпуска.
Я хочу сделать это в строке поиска, если я напишу дату между ними, чем я получу вывод этой записи. Моя база данных — mongodb
значение leavedate является переменной, с помощью которой я нахожу записи.
Вот код моего файла контроллера
public function listOfLeave(Request $request)
{
$allLeaves = null;
if (
!empty($request->input('name')) ||
!empty($request->input('leaveType')) ||
!empty($request->input('leaveDate')) ||
!empty($request->input('appliedDate')) ||
!empty($request->input('status'))
)
{
$flg = false;
if (!empty($request->input('name')))
{
$flg = true;
$allLeaves=LeaveManagement::where('name', 'LIKE', "%{$request->input('name')}%");
}
if (!empty($request->input('leaveType')))
{
if($flg)
{
$allLeaves=$allLeaves->orWhere('type', 'LIKE', "%{$request->input('leaveType')}%");
}
else
{
$allLeaves=LeaveManagement::where('type', 'LIKE', "%{$request->input('leaveType')}%");
}
}
if (!empty($request->input('leaveDate')))
{
if ($flg)
{
$allLeaves = $allLeaves->orWhere('end', '>=', $request->input('leaveDate'))
->orWhere('start', '<=', $request->input('leaveDate'));
}
else
{
$allLeaves = LeaveManagement::where('end', '>=', $request->input('leaveDate'));
}
}
if (!empty($request->input('appliedDate')))
{
if($flg)
{
$allLeaves=$allLeaves->orWhere('start', 'LIKE', "%{$request->input('appliedDate')}%");
}
else
{
$allLeaves=LeaveManagement::where('start', 'LIKE', "%{$request->input('appliedDate')}%");
}
}
if (!empty($request->input('status')))
{
if($flg)
{
$allLeaves=$allLeaves->orWhere('status', 'LIKE', "%{$request->input('status')}%");
}
else
{
$allLeaves=LeaveManagement::where('status', 'LIKE', "%{$request->input('status')}%");
}
}
$allLeaves = $allLeaves ->orderBy('name', 'ASC')
->orderBy('type', 'ASC')
->orderBy('start', 'ASC')
->orderBy('start', 'ASC')
->orderBy('status', 'ASC')
->paginate(25);
return view('pages.newleaverequest')->with(['allLeaves'=>$allLeaves]);
}
else
{
$allLeaves=LeaveManagement::orderBy('name', 'ASC')->paginate(25);
}
$allLeaves->appends(array('name'=>Input::get('name')));
return view('pages.newleaverequest', compact('allLeaves'));
}
Вот мой файл просмотра
<form action="{{ route('manage_leave') }}" method="GET" role="search">
<div class="row">
<div class="form-group">
<input type="text" class="form-control " id="search1" name="name" placeholder="Employee Name">
<select class="custom-select form-control col-md-2" id="search5" name="leaveType">
<option value="">Leave Type</option>
<option value="casual">Casual Leave</option>
<option value="medical">Medical Leave</option>
<option value="early">Early Leave</option>
</select>
<input type="date" class="form-control " id="search3" name="leaveDate" placeholder="Leave Date">
<input type="date" class="form-control " id="search4" name="appliedDate" placeholder="Applied Date">
<select class="custom-select form-control col-md-2" id="search5" name="status">
<option value="">Status</option>
<option value="Pending">Pending</option>
<option value="Approved">Approved</option>
<option value="Rejected">Rejected</option>
</select>
amp;emsp;amp;emsp;
<button class="btn btn-info" type="submit"><i class="fa fa-search "></i></button>
</div>
</div>
</form>
@if(isset($allLeaves))
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Employee Name</th>
<th>Leave Type</th>
<th>Leave Duration</th>
<th>Applied On</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<tbody>
@if($allLeaves != null)
@foreach($allLeaves as $leave)
<tr>
<td> {{ $leave->name }} </td>
<td> {{ $leave->type }} </td>
<td>
{{ date('d-m-Y', strtotime($leave->start)) }} To
{{ date('d-m-Y', strtotime($leave->end)) }}
</td>
<td> {{ date('d-m-Y', strtotime($leave->start)) }} </td>
<td>
@if($leave['status']=='Pending')
<span class="badge badge-pill badge-warning" style="color:white;font-size: 90%;font-weight:bold;">Pending</span>
@elseif($leave['status']=='Approved')
<span class="badge badge-pill badge-success" style="color:white;font-size: 90%;font-weight:bold;">Approved</span>
@else
<span class="badge badge-pill badge-danger" style="color:white;font-size: 90%;font-weight:bold;">Rejected</span>
@endif
</td>
<td>
<a href="{{route('handle_leave', $leave->id)}}" class="btn btn-info text-white">Details</a>
</td>
</tr>
@endforeach
@endif
</tbody>
</table>
<div>
{{ $allLeaves->render() }}
@endif
</div>
</div>
</div>
</div>
Комментарии:
1. В какой переменной вы публикуете свою дату? Также из каких полей вы хотите выполнить поиск по этой конкретной дате между ними?
2. <тип ввода = «дата» класс =»форма-контроль» идентификатор = «search3» имя = «Дата оставления» заполнитель =»Дата оставления»> Вот моя строка поиска В дате оставления, которую я публикую
3. Я думаю, вы не поняли мой вопрос. Если я хочу проверить
leaveDate
, что вы указали, находится между диапазоном или нет, то за какими полями этого диапазона я должен следить? Короче говоря, какое поле базы данных мне использовать для сравнения, если ваша дата находится между?4. Owk Я сожалею, что в базе данных имена полей являются StartDate и EndDate
Ответ №1:
Попробуйте заменить блок кода вашей функции:
if (!empty($request->input('leaveDate')))
{
if ($flg)
{
$allLeaves = $allLeaves->orWhere(function($query) use ($request){
$query->whereDate('end', '>=', $request->input('leaveDate'))
->whereDate('start', '<=', $request->input('leaveDate'));
});
}
else
{
$allLeaves = LeaveManagement::where('end', '>=', $request->input('leaveDate'));
}
}
Дайте мне знать, если это сработает?
Комментарии:
1. Это работает, но есть одна проблема ibb.co/mCdb7x3 Посмотрите, если я буду искать запись между 26-05-2019 и 27-05-2019 , это также даст мне запись 4-го месяца
2. Я обновил условие where моего ответа. Просто поместите ее и проверьте.
3. Нет, проблема все та же, у меня есть 2 записи С 26-05-2019 по 27-05-2019 и с 06-05-2019 по 18-05-2019 , если я выполняю поиск с 07-05-2019 , то он должен выдать мне только 2-ю запись, это даст мне обе
4. ОК. Я хочу посмотреть, что вы передали в свою
$request
переменную. Можете ли вы просто написатьprint_r($request->all()); exit;
в верхней части вашего метода и опубликовать здесь результат?5. Это отключает этот Array ( )