Laravel: 查找用户使用名称字段发布的所有帖子
Laravel: Find all posts made by a user using name field
我想通过使用 Eloquent
从路由 url 匹配用户的 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();
,它会抛出错误。
如何通过将数据库中的姓名与 eloquent
匹配来获取用户的所有帖子
您可以使用 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();
所有这些选项将创建两个查询。
我想通过使用 Eloquent
从路由 url 匹配用户的 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();
,它会抛出错误。
如何通过将数据库中的姓名与 eloquent
您可以使用 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();
所有这些选项将创建两个查询。