php - Laravel OrderBy 关系计数

我正在尝试获得最流行的黑客马拉松,这需要通过相应的黑客马拉松的 partipants->count() 进行排序。抱歉,如果这有点难以理解。

我有一个格式如下的数据库:

hackathons
    id
    name
    ...

hackathon_user
    hackathon_id
    user_id

users
    id
    name

Hackathon 模式是:

class Hackathon extends \Eloquent {
    protected $fillable = ['name', 'begins', 'ends', 'description'];

    protected $table = 'hackathons';

    public function owner()
    {
        return $this->belongsToMany('User', 'hackathon_owner');
    }

    public function participants()
    {
        return $this->belongsToMany('User');
    }

    public function type()
    {
        return $this->belongsToMany('Type');
    }
}

HackathonParticipant定义为:

class HackathonParticipant extends \Eloquent {

    protected $fillable = ['hackathon_id', 'user_id'];

    protected $table = 'hackathon_user';

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

    public function hackathon()
    {
        return $this->belongsTo('Hackathon', 'hackathon_id');
    }
}

我试过 Hackathon::orderBy(HackathonParticipant::find($this->id)->count(), 'DESC')->take(5)->get()); 但我觉得我犯了一个大错误(可能是 $this->id),因为它根本不起作用。

我将如何尝试根据最多的相关黑客松参与者获得最受欢迎的黑客松?

最佳答案

这适用于我在 Laravel 5.3 中,使用你的例子:

Hackathon::withCount('participants')->orderBy('participants_count', 'desc')->paginate(10); 

这样它在查询中被排序并且分页效果很好。

https://stackoverflow.com/questions/24208502/

相关文章:

c# - 将C#中的DateTime转换为yyyy-MM-dd格式并存储到MySql DateTim

mysql - 错误 2002 (HY000) : Can't connect to local M

mysql - 使用 mysql 查询获取字符串的最后 5 个字符

php - 如何使用 laravel 连接 mysql?

mysql - 将 Django DB 从 SQLite 迁移到 MySQL 的最佳方法是什么?

php - 一次查询 MySQL 插入多行

mysql - 在 Postgresql 中模拟 MySQL 的 ORDER BY FIELD()

mysql - SELECT INTO 和 "Undeclared variable"错误

mysql - 如果另一列为空,则选择一列

php - Doctrine2 迁移向下迁移并从浏览器而不是命令行迁移