2017-03-17 79 views
1

我想通過匹配使用雄辯
我user.php的路徑URL的用戶的name獲取用戶所有的帖子由用戶所有的帖子都有關係如下Laravel:查找使用名稱字段

public function posts() { 
    return $this->hasMany('App\Post'); 
} 

我post.php中模式有如下關係:

public function user() { 
    return $this->belongsTo('App\User'); 
} 

我的路線就像是以下幾點:

Route::get('/users/{name}', '[email protected]'); 

我知道如果我想獲取用戶的所有帖子,我需要做這樣的事情

public function show($name) { 
    $user = User::find(1); 
    $posts = $users->posts()->get(); 
    return view('users.show', compact('posts')); 
} 

,但我想基於數據庫的名稱字段來查找用戶,而不是ID
我不能使用->posts()如果我使用where像​​,它會引發錯誤。
如何通過在數據庫雄辯

回答

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

所有這些選項都會創建兩個查詢。

+1

哦,所以我應該把'第一個'方法鏈接到哪裏。這是失蹤。非常感謝。 –