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-&gt;intern-&gt;employee

当我这样做时:

@if(count($mentors))

它不检查那个。

【问题讨论】:

【参考方案1】:

要确定是否有任何结果,您可以执行以下任一操作:

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

注释/参考文献

-&gt;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

-&gt;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-&gt;intern-&gt;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-&gt;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 检查集合是不是为空的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 检查@yield 是不是为空

如何在 laravel 中检查模型的对象是不是为空?

在 Laravel 中检查请求数组是不是为空

Laravel/PHP - 如何检查 JSON 是不是为空? [复制]

Laravel:当数组为空时数组循环的集合

Laravel 8:检查数据库中的记录是不是为空