gpt4 book ai didi

php - Laravel 4 - 数据排序

转载 作者:行者123 更新时间:2023-11-30 01:09:33 26 4
gpt4 key购买 nike

我正在 Laravel 4 中构建一个网站。我的数据库中有一个名为 Games 的表,其中包含游戏列表。默认情况下,我对这些游戏进行排序:

$games = Game::orderBy('title', 'ASC')->paginate(20);

用户可以选择他们当前正在玩的游戏。这些记录存储在名为 Players 的表中,该表存储 game_id 和 user_id。

我创建的几个相关模型:

class Game extends Eloquent {

public function players()
{
return $this->hasMany('Player');
}

}

class User extends Eloquent {

public function players()
{
return $this->hasMany('Player');
}

}

class Player extends Eloquent {

public function game()
{
return $this->belongsTo('Game');
}

public function user()
{
return $this->belongsTo('User');
}

}

我想做的是,能够按最受欢迎(最多玩家总数)对我的游戏进行排序,以便可以通过这种方式查看游戏列表。我已经尝试过以下方法,但这只不过是在黑暗中进行尝试,因为我对 PHP 框架和 Laravel 还很陌生。

$games = Game::orderBy(count($this->players), 'DESC')->paginate(20);

显然 count($this->players) 是错误的,但我有点坚持这个。

谢谢。希望这一切都有意义!

:)

最佳答案

您需要手动JOIN表格,然后SELECT COUNT(player.id)GROUP BY (game.id)按计数排序(player.id)

您的最终查询应如下所示:

SELECT game.*, COUNT(player.id) AS players
FROM game
LEFT JOIN player
ON player.game_id = game.id
GROUP BY player.id
ORDER BY players

使用 Laravel 查询生成器生成它非常简单:

DB::table('game')
->leftJoin('player', 'player.game_id', '=', 'game.id')
->groupBy('player.id')
->orderBy(DB::raw('COUNT(player.id)'))
->select('game.*')
->get();

请注意,我们不能将 COUNT 别名为 players,也不能使用模型(无法JOIN)。

关于php - Laravel 4 - 数据排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19555259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com