防止在视图中延迟加载

Prevent lazy loading in view

我有一个 JSON 来自如下查询的结果:

{  
    "id":1,
    "user_id":"1",
    "message":"Hello, world",
    "created_at":"2016-09-22 00:32:20",
    "updated_at":"2016-09-22 00:32:20",
    "stats": [
        ...
    ]
},
{  
    "id":2,
    "user_id":"1",
    "message":"Hello, world",
    "created_at":"2016-09-22 00:32:20",
    "updated_at":"2016-09-22 00:32:20",
},
{
    ... more results
}

请注意,有时结果有 stats 属性,有时则没有(尽管每条记录都有 stats 关系)。别问为什么,我后台就是这么设置的。

我想在我的视图中循环浏览这些结果,如下所示:

@foreach ($posts as $post)
    @if (isset($post->stats) && !empty($post->stats)
        {{ $post->stats->total }}
    @endif
@endforeach

但是,对于 post id 2,循环也会输出 $post->stats->total 值,因为它延迟加载了 stats.

如何防止它延迟加载 stats 关系?

发生这种情况是因为您正在访问 $post->stats。您可以使用 Illuminate\Database\Eloquent\Model:

中定义的 relationLoaded() 方法来检查是否加载了 stats 关系
@foreach ($posts as $post)
    @if ($post->relationLoaded('stats'))
        {{ $post->stats->total }}
    @endif
@endforeach