2017-04-01 89 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')'移动到外部查询中。 '那里有'不需要这样的方式。 –