2013-06-04 7 views
2

Итак, я делаю сайт для моделируемой хоккейной лиги.Сложный запрос с использованием eloquent - Laravel 4

Я пытаюсь составить турнирную таблицу, и здесь все усложняется.

Существует 2 конференции. Восток и Запад.

В каждой конференции есть 3 подразделения, ради примера, давайте назовем их A, B и C.

Существует 5 команд в дивизионе, команда 1, команда 2, команда 3, команда 4, команда 5.

Так вот, где это сложно.

Статистика составлена ​​конференцией. Так, например, для Востока и Запада есть отдельное положение. Высшая команда каждого подразделения автоматически посеяна в трех лучших местах на конференции.

Например, команда 1 в дивизионе А имеет 5 очков, команда 2 в дивизионе А имеет 4, команда 4 в дивизионе Б имеет 4 балла (остальное меньше), команда 5 в дивизионе С имеет 3 балла (остальные меньше). Позиция должна быть: 1-я команда 1 - дивизия A - 5 очков 2-я группа 4 - дивизия B - 4 балла 3- команда 5 - дивизия C - 3 балла 4- команда 2 - дивизия A - 4 балла ...

код у меня есть:

$teams_east = DB::query("SELECT a.*, (CASE WHEN b.scoreMax IS NULL THEN 1 ELSE 2 END) AS SortFiddle 
           FROM (SELECT teams.*, teamdetails.division, ((`nhl_wins` *2) + `nhl_ot` + `nhl_ties`) AS scoreMax 
           FROM teams 
           LEFT JOIN teamdetails ON teams.team_name = teamdetails.pro_name 
           WHERE teamdetails.conference ='Est' ) a 
           LEFT OUTER JOIN 
           (SELECT division, MAX((`nhl_wins` *2) + `nhl_ot` + `nhl_ties`) AS scoreMax 
           FROM teams 
           LEFT JOIN teamdetails ON teams.team_name = teamdetails.pro_name 
           WHERE teamdetails.conference ='Est' GROUP BY division ORDER BY `nhl_wins`,scoreMax LIMIT 3) b 
           ON a.division = b.division 
           AND a.scoreMax = b.scoreMax 
           ORDER BY SortFiddle DESC, a.scoreMax DESC, `nhl_wins` DESC, nhl_gf DESC, nhl_ga ASC"); 

Но DB :: запрос устарела и плюс, я хотел бы использовать красноречивым, потому что это тот же самый вид кода будет использоваться где-то остальное.

ответ

1

Я не верю, что CASE уже доступна на QueryBuilder. Так у вас есть два варианта:

Это замена для DB :: запроса():

DB::select(DB::raw('select * from users')); 

Или вы можете создать все это с помощью QueryBuilder и корпусной части вы можете добавить некоторые сырые, как это :

$users = DB::table('users') 
    ->select(DB::raw('count(*) as user_count, status')) 
    ->where('status', '<>', 1) 
    ->groupBy('status') 
    ->get(); 
+0

Спасибо за вашу помощь! –

0

Я считаю, что если у вас есть модель пользователей, вы можете использовать

User::where('status', '<>', 1) 
     ->groupBy('status') 
     ->get([DB::raw('count(*) as user_count, status')]); 
Смежные вопросы