我有三个表:namespace AppBundle\Repository;
use Doctrine\ORM\EntityRepository;
class ProductRepository extends EntityRepository
{
public function getAllOrderedByNameQuery()
{
return $this->getEntityManager()
->createQuery(
'SELECT p FROM AppBundle:Product p ORDER BY p.name ASC'
);
}
}
,uploads
和一个名为categories
的{{1}}表。
表格如下:
many-to-many
每次下载“上传”时,下载列中的值都会增加1。
我想做什么,但无法弄清楚如何开始是根据category_upload
表格中的**categories**
id
name
**uploads**
id
name
downloads(integer)
**category_upload**
id
category_id
upload_id
列选择前10个类别。因此,如果downloads
列的总数对于来自给定类别的所有上传而言最大,则此类别应为第一,依此类推至第十。
这可以通过雄辩或只是SQL来实现吗?任何提示都表示赞赏!
以下是我在模特中建立关系的方式:
类别:
uploads
上传:
downloads
答案 0 :(得分:1)
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
答案 1 :(得分:0)
您的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();
})