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() 如果我使用 whereUsers::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();

所有这些选项将创建两个查询。