Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Aibat's avatar
Level 2

request->has always true

I don't know why but my $request->has('category') has value true, although it is empty!!!!

here is my JobController

$jobs = Job::orderBy('id', 'DESC');
        
        if($request->has('category')){
            $jobs->where('category', 'like', "%$request->category%");
        }
        if($request->has('cost2')){
            $jobs->whereBetween('cost',[$request->cost1,$request->cost2]);
        }
        else if($request->has('cost1')){
            $jobs->where('cost', '>=', $request->cost1);
        }
        if($request->has('region')){
            $jobs->where('region', 'like', "%$request->region%");
        }
        if($request->has('deadline2')){
            $jobs->whereBetween('deadline',[$request->deadline1,$request->deadline2]);
        }
        else if($request->has('deadline1')){
            $jobs->where('deadline', '>', $request->deadline1);
        }

        $jobs = $jobs->get();

        return view('filter', compact('jobs'));

Please help))

0 likes
13 replies
JohnBraun's avatar

Without any of your code's details, I'm afraid we can't help you.

You can use code blocks to further specify your code. In particular: the form you're submitting, your routes/web file and the controller accepting the request.

Aibat's avatar
Level 2

here is my route web file

Route::get('/filter', 'JobController@filter');

and it is my form

<form action="/filter">
                    <div class="filtr-row">
                        <label for="category">category:</label>
                        <input list="categoryes" name="category" id="category" placeholder="Строительство" />
                        <datalist id="categoryes">
                            <option value="builder">
                            <option value="restaurant worker">
                        </datalist>
                    </div>
                    <div class="filtr-row">
                        <label for="cost">Cost:</label>
                        <div class="num-input-container">
                            <input type="number" name="cost1" id="cost" placeholder="From..." />
                            &nbsp;&mdash;&nbsp;
                            <input type="number" name="cost2" id="cost" placeholder="To..." />
                            &nbsp; tg.
                        </div>
                    </div>
                    <div class="filtr-row">
                        <label for="region">Region:</label>
                        <select name="region" id="region">
                            <option value="naurizbay">naurizbay</option>
                            <option value="another">another</option>
                        </select>
                    </div>
                    <div class="filtr-row">
                        <label for="deadline">deadline:</label>
                        <div class="num-input-container">
                            <input type="number" name="deadline1" id="deadline" placeholder="From..." min="1" />
                            &nbsp;&mdash;&nbsp;
                            <input type="number" name="deadline2" id="deadline" placeholder="To..." max="31" />
                            &nbsp; .
                        </div>
                    </div>
                    <div class="filtr-btn"><input type="submit" value="Найти" /></div>
                </form>
tykus's avatar

You need to use $request->filled('category') is the request input is always present but could be empty

2 likes
tykus's avatar

If you dd($request->input('contact')), what do you get?

Aibat's avatar
Level 2
dd($request->input('category'));

I get "builder"

Aibat's avatar
Level 2
dd(empty($request->category));

get false

click's avatar

I get "builder"

That means your request is not empty.

Note that request()->has('category') checks if the request HAS a category property. Not if it contains any content. This all returns true: your-url/test?category your-url/?category= your-url/?category=0 your-url/?category=text

If you want to check if your request is empty you can use request()->filled as tykus already explained. But in your case 'category' is already filled.

ajithlal's avatar

I think you have to add an option with empty value as first option in form like

<option value="" >

And select the empty value option by default.

Hope this works.

Please or to participate in this conversation.