Условный оператор "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 шт):

Автор решения: SAnton

Вы можете использовать этот has метод, чтобы определить, присутствует ли значение в запросе. В has метод возвращает , true если значение присутствует на запросе.

В вашем случае, если вы хотите определить, присутствует ли значение в запросе и не является ли оно пустым, вы можете использовать filled метод и изменить проверку на

$request->filled('pass_id') и т.д.

https://laravel.com/docs/8.x/requests

→ Ссылка
Автор решения: Phoenixdev

Дело в том, что метод 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),в этом случае логика будет другой.

→ Ссылка