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))
Это не проверяется.
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
Чтобы определить, есть ли какие-либо результаты, вы можете выполнить одно из следующих действий:
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()) { }
Начиная с Laravel 5.3 вы можете просто использовать:
if ($mentor->isNotEmpty()) {
//do something.
}
Документация https://laravel.com/docs/5.5/collections#method-isnotempty
Это самый быстрый способ:
if ($coll->isEmpty()) {...}
Другие решения, такие как count
, делают немного больше, чем вам нужно, что требует немного больше времени.
Кроме того, имя isEmpty()
довольно точно описывает то, что вы хотите там проверить, чтобы ваш код был более читабельным.
Я предпочитаю
(!$mentor)
Является более эффективным и точным
Из php7
вы можете использовать Нулевой объединяющий опператор:
$employee = $mentors->intern ?? $mentors->intern->employee
Это вернет Null
или сотрудника.