Laravel 5.2尝试获取user_id帖子

时间:2018-03-15 11:37:40

标签: php laravel laravel-5.2 laravel-eloquent

我正在关注Udemy的Laravel课程,当我按照教练所做的一切时,由于一些奇怪的原因,我没有得到预期的结果。

这是关系一对一的课程,我在用户模型中添加了一个功能,以检查它是否有任何帖子。

如果user_id等于,则添加路线以显示帖子。

应用\ user.php的

public function post() {

    return $this->hasOne('App\Post');

}

应用\ HTTP \ routes.php文件

    Route::get('/user/{id}/post', function($id) {

    return User::find($id)->post;

});

以下是数据库中的屏幕截图,显示我在posts表中有一条user_id = 1的帖子。我还在用户表中有一个id = 1的用户。 MySQL data 访问domain / user / 1 / post时为什么会出现空白页?

Sohel,我从你的功能得到了一个结果,但不得不使用

var_dump(User::with('post')->where('id',1)->first());

然后尝试了别的东西:

return User::with('post')->where('id',$id)->first();

这就是结果:

{"id":1,"name":"Nick","email":"nick@kriogen.name","created_at":"2018-03-15 09:49:51","updated_at":"2018-03-15 09:49:51","post":null}

4 个答案:

答案 0 :(得分:0)

您的一对一关系应该如下: 应用\ user.php的

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

应用\ post.php中

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

您可以尝试在控制器中执行此功能:

public function getPost {
    $user= User::find($id);
    return $user->post();
}

答案 1 :(得分:0)

问题不在于功能,问题出在数据库中。 列deleted_at不是NULL,它将帖子标记为软删除,因此没有显示。

答案 2 :(得分:0)

自" user_id"字段在"帖子"表,App \ User模型中的关系需要是:

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

然后,在没有括号的情况下调用它来获得结果:

public function getPost {
    $user= User::find($id);
    return $user->post;
}

使用括号时,您将获得构建器而不是结果。例如:

public function getPost {
    $user= User::find($id);
    return $user->post()->get();
}

OR

public function getPost {
    $user= User::find($id);
    return $user->post()->where('name', 'like', '%hello%')->get();
}

答案 3 :(得分:-1)

我认为你需要->hasMany()关系,如果你想检查用户是否有任何帖子,因为用户可以有很多帖子......而且代码是:

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

电话:

User::find($id)->posts;