2017-02-20 104 views
2

鑑於我有3個表:user,competences和competences_user,我如何通過查詢構建器獲得每個用戶的技能列表?laravel中的3個表的關係

表結構:

  • 用戶:ID,NOM ....
  • 能力:ID,滴度...
  • competences_user:ID,competence_id,USER_ID ...

這裏是我到目前爲止已經試過:

select user.id, user.nom, competences.titre 
FROM user 
    Inner Join competences_user 
    ON = competences_user.competence_id AND user.id = competence_user.user_id 
    Inner Join competences 
    ON competences.id = competence_user.competence_id 
+1

@ Nablie Inner Join compes_user ON = competences_user.competence_id爲什麼這裏有這個=在這個地方? – VERYNET

+0

我對這個問題進行了重新編寫和重新格式化,使其更易於閱讀。我也分解了查詢代碼,以便不需要側滾以閱讀它。 – David

回答

0

有很多方法可以做到這一點,沒有查詢生成器的簡單方法:

即:

$users = DB::table('users') 
     ->join('contacts', 'users.id', '=', 'contacts.user_id') 
     ->join('orders', 'users.id', '=', 'orders.user_id') 
     ->select('users.*', 'contacts.phone', 'orders.price') 
     ->get(); 

要回答你的問題:

$users = DB::table('users') 
     ->join('competences_user', 'competences_user.user_id', '=', 'users.id') 
     ->join('competences', 'competences_user.competence_id', '=', 'competences.id') 
     ->select('users.*', 'competences.titre') 
     ->get(); 

您可以參考documentation更多細節。

+0

@ Fadil它的工作原理,但顯然有必要將查詢分隔爲2,因爲每個用戶都有多種技能 – nabil

+0

不需要,查詢將返回多行(如果存在)。 –

+0

謝謝,測試後我再回來給你! – nabil