使用eloquent的复杂查询 - Laravel 4

时间:2013-06-04 02:37:52

标签: php mysql sql laravel laravel-4

所以我正在建立一个模拟冰球联赛的网站。

我正在努力争取积分榜,这就是它变得复杂的地方。

有2个会议。东西方。

在每个会议中,有3个部门,为了示例,我们称之为A,B和C.

每个部门有5个团队,第1组,第2组,第3组,第4组,第5组。

所以这就是它变得棘手的地方。

排名由会议组成。例如,东西方有一个单独的排名。每个部门的顶级团队将自动播种在会议的前3个位置。

例如,A组的1队有5分,A组的2队有4分,B组的4队有4分(其余的得分少),C组的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 :: query已被弃用,而且,我想使用eloquent,因为同样的代码将在其他地方使用。

2 个答案:

答案 0 :(得分:1)

我不相信CASE已经在QueryBuilder上可用了。所以你有两个选择:

这是DB :: query()的替代品:

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

或者您可以使用QueryBuilder创建所有内容,CASE部分可以添加一些原始内容,如下所示:

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

答案 1 :(得分:0)

我相信如果你有用户型号,你可以使用

User::where('status', '<>', 1)
      ->groupBy('status')
      ->get([DB::raw('count(*) as user_count, status')]);