在视图中防止延迟加载

时间:2016-09-30 04:50:59

标签: laravel laravel-5 laravel-5.3

我有一个来自查询的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

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

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

1 个答案:

答案 0 :(得分:5)

这是因为您正在访问$post->stats。您可以使用stats中定义的relationLoaded()方法检查是否加载了Illuminate\Database\Eloquent\Model关系:

@foreach ($posts as $post)
    @if ($post->relationLoaded('stats'))
        {{ $post->stats->total }}
    @endif
@endforeach