Laravel:查找用户使用名称字段发布的所有帖子

时间:2017-03-17 14:00:05

标签: laravel laravel-5 eloquent laravel-routing laravel-5.4

我想通过使用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();,它会抛出错误。   
如何通过将他在数据库中的名称与雄辩

相匹配来获取用户的所有帖子

1 个答案:

答案 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();

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