Laravel雄辩的查询返回非对象

时间:2019-05-19 00:58:49

标签: laravel eloquent eager-loading

我正在尝试减少执行的SQL查询的数量。我有一个帖子,我想找该帖子的作者并在页面上列出。为了减少SQL查询的数量,我有以下代码:

$posts = Post:all();
$posts->load('user');
$posts->first()->user;

我收到错误/通知“试图获取非对象的属性'user'”。如何摆脱这个错误?

3 个答案:

答案 0 :(得分:1)

提前加载会将此操作减少到仅2个查询


    public function example()
    {
        $posts = Posts::with('user')->get();

        foreach ($posts as $post) {
            echo $post->user->name;
        }
    }

答案 1 :(得分:0)

如果您有一个帖子(一个帖子),也许最好使用find方法。像这样的东西:

$post = Post::find($id);
return $post->user;

答案 2 :(得分:0)

由于您尝试访问的帖子(或第一篇帖子)与任何用户都不相关,因此可能出现错误。您可以尝试这样做以避免错误。

$posts = Post:all();
$posts->load('user');
// Try any one of below.
1) $posts->first()->user ?? '';
2) $posts->first()->user or ''; // in Laravel 5.5 or below