Php 根据另一个表格中的一列,选择十个最热门的类别

Php 根据另一个表格中的一列,选择十个最热门的类别,php,mysql,sql,laravel,eloquent,Php,Mysql,Sql,Laravel,Eloquent,我有三个表:uploads、categories和一个名为category_upload的多对多表 这些表如下所示: **categories** id name **uploads** id name downloads(integer) **category_upload** id category_id upload_id 每次我下载上传文件时,下载栏中的值都会增加1 我想做的是,根据uploads表中的downloads列选择前10个类别,但我不知道如何开始。因此,如果下载列

我有三个表:uploads、categories和一个名为category_upload的多对多表

这些表如下所示:

**categories**

id
name

**uploads**

id
name
downloads(integer)

**category_upload**

id
category_id
upload_id
每次我下载上传文件时,下载栏中的值都会增加1

我想做的是,根据uploads表中的downloads列选择前10个类别,但我不知道如何开始。因此,如果下载列的总数是给定类别中所有上传的最大值,那么这个类别应该排在第一位,依此类推到第十位

这可以通过雄辩的或仅仅是SQL来实现吗?如何实现?任何提示都将不胜感激

以下是我在模型中建立关系的方式:

类别:

public function uploads(){
        return $this->belongsToMany('App\Upload');
    } 
上传:

public function category(){
    return $this->belongsToMany('App\Category');
}
你的分类模型

在你的controllerCatagory中

试试这个

Category::select("*")->with(['downloads' => function($q){
    $q->oderBy('downloades','desc')->take(10)->get();
})

样本数据和期望的结果将非常有用。例如,什么是书?@GordonLinoff书是上传的,我更正了。嗨,谢谢你的回答。它做了一些小的调整,下面是我改变的:选择名称,从选择c.name上传,SUM作为上传从上传下载作为u内部连接类别\上传作为uc上的uc。上传作为c上的c上传作为u.id=u.id内部连接类别c上的c.id=uc.category\ id按c.name分组作为t按上传顺序描述限制10
public function downloads()
{
    return $this->hasMany('App\Upload','category_upload','category_id','upload_id');
}
Category::select("*")->with(['downloads' => function($q){
    $q->oderBy('downloades','desc')->take(10)->get();
})