2017-03-13 42 views
-1

我有兩個表雄辯凡FK值(用)

users: 
id, name 

posts: 
id, user_id, text 

我如何通過它的名字,而不是ID查詢用戶的所有帖子。事情是這樣的:

Post::with('user')->where('name','Peter') 

編輯:

我發現,這是更好地開始從用戶的查詢,而不是:

User::where('name','Peter')->first()->Posts(); 

但是,調用第一()執行一個單獨的查詢和文章第二個。是否有可能在一個SQL調用db中的一切?

回答

0

您可以嘗試查詢生成器,做這樣的事情:

$posts = DB::table('users') 
      ->join('posts', 'users.id', '=', 'posts.user_id') 
      ->where('name','Peter') 
      ->get(); 
0

你定義一個關係?用戶的帖子是一對多的...在你的用戶模型,添加到職位的關係......

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

然後你就可以查詢所有職位用戶這樣...

$user = App\User::where('name', 'Peter')->first(); 

foreach ($user->posts as p) { 
    // 
} 

看看關係文檔,在雄辯中的關係是真正好,不難想出...

如果你想加載關係,你可以用with()函數來做...這將迫切加載關係...

$user = App\User::with('posts')->where('name', 'Peter')->first(); 

希望這有助於

+0

這種方法使用延遲加載,並導致甚至比這兩個我已經在該解決方案的更多的數據庫查詢在我的問題 – Chris

+0

然後只是渴望加載與()函數的關係。查看編輯的答案... – Serge

0

看來,下面的語法創建一個查詢:

Post::whereHas('User', function($query) { 
      $query->where('name', 'Peter'); 
     })->get();