Jamie
Jamie

Reputation: 10906

Laravel check if collection is empty

I've got this in my Laravel webapp:

@foreach($mentors as $mentor)
    @foreach($mentor->intern as $intern)
        <tr class="table-row-link" data-href="/werknemer/{!! $intern->employee->EmployeeId !!}">
            <td>{{ $intern->employee->FirstName }}</td>
            <td>{{  $intern->employee->LastName }}</td>
        </tr>
    @endforeach
@endforeach

How could I check if there are any $mentors->intern->employee ?

When I do :

@if(count($mentors))

It does not check for that.

Upvotes: 112

Views: 373632

Answers (8)

Ajowi
Ajowi

Reputation: 515

In blade, you can use isNotEmpty() or isEmpty() but, as always with blade, you must start with @.

@if($collection->isNotEmpty())
    <ul>
        @foreach($collection as $item)
            //normal loop
        @endforeach
    </ul>
@else
    <p>No items found.</p>
@endif

Upvotes: 0

amirreza sharifi
amirreza sharifi

Reputation: 31

First you can convert your collection to an array. Next run an empty method like this:

if(empty($collect->toArray())){}

Upvotes: 1

Kesara Wimal
Kesara Wimal

Reputation: 729

This is the best solution I found so far.

in blade

@if($mentors->count() == 0)
    <td colspan="5" class="text-center">
        Nothing Found
    </td>
@endif

in controller

if ($mentors->count() == 0) {
    return "Nothing Found";
}

Upvotes: 9

Drudge Rajen
Drudge Rajen

Reputation: 7995

To determine if there are any results you can do any of the following:

if ($mentor->first()) { } 
if (!$mentor->isEmpty()) { }
if ($mentor->count()) { }
if (count($mentor)) { }
if ($mentor->isNotEmpty()) { }

Notes / References

->first()

https://laravel.com/api/5.7/Illuminate/Database/Eloquent/Collection.html#method_first

isEmpty() https://laravel.com/api/5.7/Illuminate/Database/Eloquent/Collection.html#method_isEmpty

->count()

https://laravel.com/api/5.7/Illuminate/Database/Eloquent/Collection.html#method_count

count($mentors) works because the Collection implements Countable and an internal count() method:

https://laravel.com/api/5.7/Illuminate/Database/Eloquent/Collection.html#method_count

isNotEmpty()

https://laravel.com/docs/5.7/collections#method-isnotempty

So what you can do is :

if (!$mentors->intern->employee->isEmpty()) { }

Upvotes: 295

Marcello Pato
Marcello Pato

Reputation: 504

I prefer

(!$mentor)

Is more effective and accurate

Upvotes: 0

Mohamed Salem Lamiri
Mohamed Salem Lamiri

Reputation: 6077

Starting from Laravel 5.3 you can simply use :

if ($mentor->isNotEmpty()) {
//do something.
}

Documentation https://laravel.com/docs/5.5/collections#method-isnotempty

Upvotes: 36

Csongor Halmai
Csongor Halmai

Reputation: 3915

This is the fastest way:

if ($coll->isEmpty()) {...}

Other solutions like count do a bit more than you need which costs slightly more time.

Plus, the isEmpty() name quite precisely describes what you want to check there so your code will be more readable.

Upvotes: 22

otezz
otezz

Reputation: 1272

You can always count the collection. For example $mentor->intern->count() will return how many intern does a mentor have.

https://laravel.com/docs/5.2/collections#method-count

In your code you can do something like this

foreach($mentors as $mentor)
    @if($mentor->intern->count() > 0)
    @foreach($mentor->intern as $intern)
        <tr class="table-row-link" data-href="/werknemer/{!! $intern->employee->EmployeeId !!}">
            <td>{{ $intern->employee->FirstName }}</td>
            <td>{{  $intern->employee->LastName }}</td>
        </tr>
    @endforeach
    @else
        Mentor don't have any intern
    @endif
@endforeach

Upvotes: 56

Related Questions