Laravel 检查集合是不是为空
Posted
技术标签:
【中文标题】Laravel 检查集合是不是为空【英文标题】:Laravel check if collection is emptyLaravel 检查集合是否为空 【发布时间】:2016-06-20 17:47:33 【问题描述】:我在我的 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))
它不检查那个。
【问题讨论】:
【参考方案1】:要确定是否有任何结果,您可以执行以下任一操作:
if ($mentor->first())
if (!$mentor->isEmpty())
if ($mentor->count())
if (count($mentor))
if ($mentor->isNotEmpty())
注释/参考文献
->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)
有效,因为 Collection 实现了 Countable 和内部 count() 方法:
https://laravel.com/api/5.7/Illuminate/Database/Eloquent/Collection.html#method_count
isNotEmpty()
https://laravel.com/docs/5.7/collections#method-isnotempty
所以你可以做的是:
if (!$mentors->intern->employee->isEmpty())
【讨论】:
是的,我知道,但导师并不总是有实习生。那么我该如何检查呢? `if ($mentors->has('intern'))【参考方案2】:您可以随时计算收藏。例如$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
【讨论】:
【参考方案3】:这是最快的方法:
if ($coll->isEmpty()) ...
像count
这样的其他解决方案比您需要的多一点,这会花费更多的时间。
另外,isEmpty()
名称非常准确地描述了您想要在那里检查的内容,因此您的代码将更具可读性。
【讨论】:
【参考方案4】:从 Laravel 5.3 开始,您可以简单地使用:
if ($mentor->isNotEmpty())
//do something.
文档https://laravel.com/docs/5.5/collections#method-isnotempty
【讨论】:
【参考方案5】:我更喜欢
(!$mentor)
更有效更准确
【讨论】:
为什么会更有效、更准确? 在集合上这无法检查集合是否为空【参考方案6】:来自php7
,您可以使用Null Coalesce Opperator:
$employee = $mentors->intern ?? $mentors->intern->employee
这将返回Null
或员工。
【讨论】:
我认为如果 $mentors->intern 为 NULL 会引发错误。正确的做法是这样的:$employee = $mentors->intern ?? NULL
【参考方案7】:
这是迄今为止我找到的最佳解决方案。
在刀片中
@if($mentors->count() == 0)
<td colspan="5" class="text-center">
Nothing Found
</td>
@endif
在控制器中
if ($mentors->count() == 0)
return "Nothing Found";
【讨论】:
【参考方案8】:首先,您可以将集合转换为数组。接下来运行一个像这样的空方法:
if(empty($collect->toArray()))
【讨论】:
以上是关于Laravel 检查集合是不是为空的主要内容,如果未能解决你的问题,请参考以下文章