2017-02-20 16 views
2

Учитывая, что у меня есть 3 таблицы: пользователь, компетенции и компетенции_user, как я могу получить список навыков каждого пользователя с помощью query-builder?отношение 3 таблиц в laravel

Таблица структуры:

  • пользователь: идентификатор, Nom ....
  • компетенциями: идентификатор, титр ...
  • competences_user: идентификатор, 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 Присоединиться к компетенциям_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