2017-04-01 88 views
0

請不要告訴我把orderBy放在函數內部,因爲這是行不通的。 kill_count和death_count是roleplay關係Laravel命令通過使用2個表?

列這裏是我的全碼:

$topCredits = Player::whereHas("roleplay", function($q) { 
      $q->where('government_id', '<', '1'); 
     })->orderBy('credits', 'DESC')->limit(10)->get(); 

     $topKills = Player::whereHas("roleplay", function($q) { 
      $q->where('government_id', '<', '1')->orderBy('kill_count', 'DESC'); 
     })->limit(10)->get(); 

     $topDeaths = Player::whereHas("roleplay", function($q) { 
      $q->where('government_id', '<', '1')->orderBy('death_count', 'DESC'); 
     })->limit(10)->get(); 

現在,第一$topCredits作品完美,但底部2沒有。他們工作得很好,除了它並沒有通過death_count和kill_count命令,任何人都可以幫忙嗎? roleplay是hasOne在兩邊的關係。

+0

什麼是球員和角色扮演之間的關係? –

+0

HasOne和HasOne –

回答

0

orderBy在whereHas對玩家沒有任何影響。由於whereHas是Payers的子查詢。

$topKills = Player::whereHas("roleplay", function($q) { 
     $q->where('government_id', '<', '1'); 
    })->leftJoin("roleplay","roleplay.player_id","=","players.id") 
    ->select("players.*") 
    ->orderBy('roleplay.kill_count', 'DESC') 
    ->limit(10) 
    ->get(); 

希望這有助於

+0

而不是硬編碼的表名,有沒有辦法從模型中得到它? –

+0

加入,沒有。 – oseintow

+0

@oseintow由於它是一個HasOne關係,所以可以使用INNER JOIN並將' - > where('government_id','<','1')'移動到外部查詢中。 '那裏有'不需要這樣的方式。 –