Условный оператор "elseif" не срабатывает
люди добрые, в моем проекте по laravel не срабатывает условный оператор для 'card_number' и так далее. Срабатывает только первый условный оператор для "pass_id" и выводит мне коллекцию. Ввожу корректные данные, которые есть в базе данных. Подскажите, в чем моя ошибка. Отрывок кода для файла маршрутов в данном случае:
```
Route::post('/send','MainController@sendPassNumberInformation')-
>name('send_pass_number_information');
Код для контроллера с условными операторами:
```
public function sendPassNumberInformation()
{
if (\request()->has('pass_id')) {
return PassNumber::query()->where('pass_id','=', \request()->get('pass_id'))->get();
}
elseif (\request()->has('card_number')) {
return PassNumber::query()->where('card_number','=', \request()->get('card_number'))->get();
}
elseif (\request()->has('is_active ')) {
return PassNumber::query()->where('card_number','=', \request()->get('is_active'))->get();
}
elseif (\request()->has('created_at')) {
return PassNumber::query()->where('created_at','=', \request()->get('created_at'))->get();
}
}
Код для самой формочки:
<form method='POST' action="{{route('send_pass_number_information')}}">
{{ csrf_field() }}
<h1>Форма получения истории пропуска</h1>
<ul>
<li class="li"><label>
<input class="input" type="text" name="pass_id" id="pass_id" placeholder="ID пропуска"/>
</label></li>
<li class="li"><label>
<input class="input" type="text" name="card_number" id="card_number" placeholder="Номер пропуска"/>
</label></li>
<li class="li"><label>
<input class="input" type="text" name="is_active" id="is_active" placeholder="Актуальность"/>
</label></li>
<li class="li"><label>
<input class="input" type="text" name="created_at" id="created_at" placeholder="Дата создания пропуска"/>
</label></li>
</ul>
<button class="button" type="submit">Выполнить</button>
</form>
Код для миграции данной модели:
{
Schema::create('pass_numbers', function (Blueprint $table) {
$table->bigIncrements('id');
$table->foreignId('pass_id')->index()->constrained('passes')->cascadeOnDelete();
$table->string('card_number');
$table->string('system_number');
$table->boolean('is_active')->default(true)->index();
$table->softDeletes();
$table->timestamps();
});
}
Ответы (2 шт):
Вы можете использовать этот has метод, чтобы определить, присутствует ли значение в запросе. В has метод возвращает , true если значение присутствует на запросе.
В вашем случае, если вы хотите определить, присутствует ли значение в запросе и не является ли оно пустым, вы можете использовать filled метод и изменить проверку
на
$request->filled('pass_id') и т.д.
Дело в том, что метод has проверяет есть ли этот параметр в запросе,а он есть всегда, поэтому отрабатывает 1е условие и дальше не идет...В вашем случае надо проверять не только на существование параметра, но и на его содержимое..например так
public function sendPassNumberInformation(Request $request)
{
if (!empty($request->pass_id)) {
return PassNumber::where('pass_id', $request->pass_id)->get();
}
elseif (!empty($request->card_number)) {
return PassNumber::where('card_number',$request->card_number)->get();
}
elseif (!empty($request->is_active)) {
return PassNumber::where('card_number',$request->is_active)->get();
}
elseif (!empty($request->created_at)) {
return PassNumber::where('created_at',$request->created_at)->get();
}
}
Это конечно же при условии, что вы не ждете одновременно нескольких параметров (например pass_id и is_active),в этом случае логика будет другой.