我正在关注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}
答案 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;