我该如何吸引发布该帖子的用户

时间:2019-08-21 17:01:17

标签: php laravel blogs

我正在通过开发一个小型博客来学习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  }}

2 个答案:

答案 0 :(得分:0)

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

Post.php

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

// ...

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

此外,您不应该直接从前端进行查询,而是尝试在后端进行eager loading关系,然后将对象返回视图:

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>

答案 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或没有查询,都是相同的。