2016-05-12 2 views
1

Я создаю рейтинг значков игроков, и я застрял в запросе db.Laravel - Получение данных из нескольких таблиц (присоединение и заказ)

Таблицы: пользователя (идентификатор), клуб (идентификатор), club_user (user_id, club_id), значки (user_id)

Я хотел бы получить список всех пользователей из указанного клуба (например, клуб .id = 1) с количеством значков, которые у них есть. Результаты должны быть заказаны по количеству значков.

Как создать такой запрос db? Возможно ли это с Eloquent?

Должно ли оно быть сделано с db::table и join?

Table user 

id|name 
1|John 
2|Robert 
3|Kate 


Table club 

id|name 
1|Sunshine Club 
2|Example Club 


Table club_user 

user_id|club_id 
1|1 
2|1 
3|2 


Table bagdes 

id|name|user_id|club_id 
1|Champion|1|1 
2|Some badge|1|1 
3|example|2|1 
4|Gold Badge|3|2 

поэтому, если бы я хотел был бы получить рейтинг пользователей из клуба 1, заказываемый по количеству значков.

я должен получить:

name|number of badges 
John|2 (badges) 
Robert|1 (badge) 

Kate is not it this club. 
+0

Пожалуйста, укажите структуру таблицы с некоторыми фиктивными данными, и желаемый результат. –

+0

@BikashP добавил фиктивные данные. –

+0

Мой ответ был полезен @Michal –

ответ

1

Попробуйте

select user.name ,user.id as userid , (select count(bagdes.id) from 
bagdes  where user_id= userid) 
as total_badges from user inner join club_user on 
user.id = club_user.user_id where club_user.club_id = 1 

Вы получите свой выход.

0

Наконец я сделал это с этой БД :: таблицы запроса:

$users = DB::table('users') 
      ->select('users.name', DB::raw('count(*) as badges')) 
      ->join('badges', 'badges.user_id', '=', 'users.id') 
      ->where('badges.club_id', 1) 
      ->groupby('users.id') 
      ->orderBy('badges', 'DESC') 
      ->get();