Laravel проверяет, пуста ли коллекция


У меня есть это в моем веб-приложении Laravel:

@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

Как я могу проверить, есть ли какие-либо $mentors->intern->employee ?

Когда я это сделаю:

@if(count($mentors))

Это не проверяется.

Author: Laerte, 2016-03-07

6 answers

Вы всегда можете посчитать коллекцию. Например, $mentor->intern->count() вернет, сколько стажеров у наставника.

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

В своем коде вы можете сделать что-то вроде этого

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
 11
Author: otezz, 2016-03-08 02:32:04

Чтобы определить, есть ли какие-либо результаты, вы можете выполнить одно из следующих действий:

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

Примечания/Ссылки

->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) работает, потому что коллекция реализует счетный и внутренний метод count():

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

Итак, что вы можете сделать, это:

if (!$mentors->intern->employee->isEmpty()) { }
 34
Author: Drudge, 2018-09-29 11:53:53

Начиная с Laravel 5.3 вы можете просто использовать:

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

Документация https://laravel.com/docs/5.5/collections#method-isnotempty

 11
Author: Mohamed Salem Lamiri, 2017-10-30 15:09:20

Это самый быстрый способ:

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

Другие решения, такие как count, делают немного больше, чем вам нужно, что требует немного больше времени.

Кроме того, имя isEmpty() довольно точно описывает то, что вы хотите там проверить, чтобы ваш код был более читабельным.

 6
Author: Csongor Halmai, 2017-07-17 04:05:16

Я предпочитаю

(!$mentor)

Является более эффективным и точным

 0
Author: Marcello Patto, 2018-07-25 14:56:22

Из php7 вы можете использовать Нулевой объединяющий опператор:

$employee = $mentors->intern ?? $mentors->intern->employee

Это вернет Null или сотрудника.

 0
Author: d.raev, 2018-09-26 08:13:32