我在Udemy上学习Laravel课程,虽然我遵循了老师所做的一切,但由于一些奇怪的原因,我没有得到预期的结果。
这是关系一对一课,我在用户模型中添加了一个函数来检查它是否有任何帖子。
然后,如果用户id等于,则添加显示post的路由。
应用程序\用户。php
public function post() {
return $this->hasOne('App\Post');
}
app\Http\routes.php
Route::get('/user/{id}/post', function($id) {
return User::find($id)->post;
});
下面是数据库的屏幕截图,显示我在posts表中有一篇用户_id=1的帖子。我在用户表中还有一个id=1的用户。MySQL数据为什么访问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}
您的一对一关系应为:app\User。php
public function post() {
return $this->hasOne('App\Post');
}
app\Post。php
public function user() {
return $this->hasOne('App\User');
}
您可以尝试在控制器中执行此功能:
public function getPost {
$user= User::find($id);
return $user->post();
}
问题不在于函数,而在于数据库。列deleted_at不是NULL,它将帖子标记为被软删除,因此不显示。
由于"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();
}
或者
public function getPost {
$user= User::find($id);
return $user->post()->where('name', 'like', '%hello%')->get();
}