我想通过使用Eloquent与路线网址中的用户的name
进行匹配来获取用户发布的所有帖子
我的User.php关系如下
public function posts() {
return $this->hasMany('App\Post');
}
我的Post.php模型有以下关系:
public function user() {
return $this->belongsTo('App\User');
}
我的路线如下:
Route::get('/users/{name}', 'UsersController@show');
我知道如果我想要获取用户需要执行此类操作的所有帖子
public function show($name) {
$user = User::find(1);
$posts = $users->posts()->get();
return view('users.show', compact('posts'));
}
但我希望根据数据库中的名称字段找到用户,而不是id
如果我使用->posts()
where
,我就无法使用Users::where('name', $name)->posts()->get();
,它会抛出错误。
如何通过将他在数据库中的名称与雄辩
答案 0 :(得分:3)
您可以使用whereHas()
:
$posts = Post::whereHas('user', function($q) use($name) {
$q->where('name', $name);
})->get();
或者你可以这样做:
User::where('name', $name)->first()->posts()->get();
或者:
$user = User::where('name', $name)->first();
$posts = Post::where('user_id', $user->id)->get();
所有这些选项都会创建两个查询。