我如何检索 [=10th=] 编辑了 post 的用户

How can i retreive the user who posted the post

我正在通过开发一个小型博客来学习 laravel。我已经创建了所有必要的关系。但是我无法获得最初创建 post 的用户的名称。

我试过了

$post->user->name;

但是这个 returns null,但是如果我这样做

$post->user->id

它 returns 创建 post

的用户的 id

我的post模型有这种关系

# Post.php

public function user()
{
    return $this->belongsTo('App\Post');
}

我的用户模型有这种关系

# User.php

public function posts()
{
    return $this->hasMany('App\Post');
}

我想要的结果是如果我写

$post->user->name

它应该显示用户名

现在我通过使用此语句得到类似的结果:

{{ \App\User::find($post->user_id)->name  }}

修正你的关系定义。 Post模型应该指向User模型:

Post.php

use App\User; // <----

// ...

public function user()
{
    return $this->belongsTo(User::class);
}   //                      ^^^^^^^^^^^

此外,您不应该直接从前端进行查询,而是尝试 eager loading 后面的关系,然后 return 对象到视图:

PostController.php

public function show(Request $request)
{
    $post = Post::with('user')->find(1);
    //            ^^^^^^^^^^^^
    return view('my_view')->with('post', $post);
}

那么在你看来你直接使用这个对象就可以了:

my_view.blade.php

<h1> {{ $post->user->name }} </h1>

Post模型上的这个relationship是错误的:

public function user()
{
    return $this->belongsTo('App\Post');
}

应该是:

public function user()
{
    return $this->belongsTo('App\User');
}

有了 $post->user->name 视图中的关系应该开箱即用。

如果您要检索单个 Post,则不需要 eager load Usereager load 能够在您获得 postscollection 和关联的 users 时减少所需的查询。

如果你得到一个 single Post 带有预加载的 User 或没有查询是相同的。