我有三张桌子:uploads
,categories
和一张名为many-to-many
的category_upload
桌子。
表格如下所示:
**categories**
id
name
**uploads**
id
name
downloads(integer)
**category_upload**
id
category_id
upload_id
每次下载“上传”时,下载列中的值都会增加1。
我想做什么,但无法弄清楚如何开始是根据downloads
表中的uploads
列选择前10个类别。因此,如果downloads
列的总数对于来自给定类别的所有上传来说是最大的,则此类别应为第一,依此类推至第十。
这可以通过雄辩或只是SQL来实现吗?任何提示表示赞赏!
以下是我在模型中建立关系的方式:
分类:
public function uploads(){
return $this->belongsToMany('App\Upload');
}
上传:
public function category(){
return $this->belongsToMany('App\Category');
}
Select category_id, uploads
From (
Select category_id, SUM(downloads) as uploads
From uploads as u
Left join upload_category as uc on uc.id=u.upload_id
Left join category as c on c.id=uc.category_id
Group by category_id )as t
Order by uploads desc
Limit 10
你的Category
模型
public function downloads()
{
return $this->hasMany('App\Upload','category_upload','category_id','upload_id');
}
在你的控制器(Catagory
)
试试这个
Category::select("*")->with(['downloads' => function($q){
$q->oderBy('downloades','desc')->take(10)->get();
})