首页 > 解决方案 > 如果数据不存在,如何跳过关系?

问题描述

我有一个Event和一个Invitation模型,它们之间有一个关系:一个活动可以有很多邀请。

我试图只显示有邀请的事件,如果没有,就跳过这个事件。

我的Event模型:

class Event extends Model
{   
    public function invitations()
    {
        return $this->hasMany(Invitation::class, 'event_id') ?? [];   
}

我试着用?? []如果关系不存在,

这是我的看法:

@if ($event->invitations != null)
    @foreach ($event->invitations as $event)
        <h5>{{ $event->email }}</h5>
    @endforeach
@else
    <h5>Not Found</h5>
@endif

它没有通过else声明。

当不存在时,我应该如何编写它以进入else语句?$event->invitations

标签: laraveleloquentlaravel-blade

解决方案


invitations()方法的返回结果是一个集合,所以当你这样做时$event->invitations != null,它始终是true,即使没有特定事件的邀请(空集合与 不同null)。

我宁愿建议您根据您的情况检查集合的大小:

@if ($event->invitations->count())
    @foreach ($event->invitations as $event)
        <h5>{{ $event->email }}</h5>
    @endforeach
@else
    <h5>Not Found</h5>
@endif

或者,捷径一:

@empty ($event->invitations)
    <h5>Not Found</h5>
@else
    @foreach ($event->invitations as $event)
        <h5>{{ $event->email }}</h5>
    @endforeach
@endempty

甚至最短:

@forelse ($event->invitations as $event)
    <h5>{{ $event->email }}</h5>
@empty
    <h5>Not Found</h5>
@endforelse

推荐阅读