我正在通过开发一个小型博客来学习laravel。我已经创建了所有必要的关系。但是我无法获得最初创建该帖子的用户的姓名。
我尝试过
$post->user->name;
但是这返回null
,但是如果我这样做
$post->user->id
它返回创建帖子的用户的ID
我的帖子模型具有这种关系
# 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 }}
答案 0 :(得分:0)
修正您的关系定义。 Post
模型应指向User
模型:
use App\User; // <----
// ...
public function user()
{
return $this->belongsTo(User::class);
} // ^^^^^^^^^^^
此外,您不应该直接从前端进行查询,而是尝试在后端进行eager loading关系,然后将对象返回视图:
public function show(Request $request)
{
$post = Post::with('user')->find(1);
// ^^^^^^^^^^^^
return view('my_view')->with('post', $post);
}
然后在您的视图中,您直接使用该对象:
<h1> {{ $post->user->name }} </h1>
答案 1 :(得分:0)
在relationship
模型上的Post
是错误的:
public function user()
{
return $this->belongsTo('App\Post');
}
应该是:
public function user()
{
return $this->belongsTo('App\User');
}
在视图中具有$post->user->name
位置的关系后,即可使用。
如果您要检索单个User
,则无需紧急加载 Post
,紧急加载可以减少所需的数据。当您获得collection
的{{1}}和关联的posts
时查询。
如果您获得一个单个 users
,并且它急切地加载了Post
或没有查询,都是相同的。