Laravel OrderBy关系计数怎么做?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (41)

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

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());但是它根本不起作用。

我要怎么做才能得到hackathons?

提问于
用户回答回答于

你应该可以很容易地使用Collection' sortBy()和' count()方法来完成这个任务。

$hackathons = Hackathon::with('participants')->get()->sortBy(function($hackathon)
{
    return $hackathon->participants->count();
});
用户回答回答于

这适用于我在Laravel 5.3中:

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

这样它就会在查询中进行排序,并且分页效果很好。

扫码关注云+社区

领取腾讯云代金券