Laravel — получение данных из нескольких таблиц (объединение и упорядочение)

Я создаю рейтинг игроков значки, и я застрял с запросом БД.

Таблицы:
user (id), club (id), club_user (user_id, club_id), значки (user_id)

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

Как создать такой запрос БД? Это возможно с Eloquent?

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

Table user

id|name
1|John
2|Robert
3|KateTable club

id|name
1|Sunshine Club
2|Example ClubTable club_user

user_id|club_id
1|1
2|1
3|2Table 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.

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

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

1

Другие решения

Наконец я сделал это с помощью этого запроса DB :: table:

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

По вопросам рекламы [email protected]