我正在使用Symfony3框架,我有用户实体和文件实体。我想在Sonata管理用户列表中显示用户上传的所有大小文件的总和。当我想使该字段可排序时,出现错误:
`Catchable Fatal Error: Argument 1 passed to SonataDoctrineORMAdminBundleDatagridProxyQuery::entityJoin() must be of the type array, null given, called in /home/milos/sites/coinaphoto/vendor/sonata-project/doctrine-orm-admin-bundle/Datagrid/ProxyQuery.php on line 143 and defined`
我在用户实体中有自定义函数,用于计算文件总和。它返回字符串。
我的问题是我是否可以以某种方式将 dql 传递给标准以获得总和。或者你能建议一些其他方法来实现这一点吗?
` public function getStoragge(){
$criteria = Criteria::create()
->where(Criteria::expr()->someexpression...);
$matches = $this->file->matching($criteria);
}`
类似于需要聚合字段时的情况
` $dql = "SELECT SUM(e.amount) AS balance FROM BankEntitiesEntry e " .
"WHERE e.account = ?1";
$balance = $em->createQuery($dql)
->setParameter(1, $myAccountId)
->getSingleScalarResult();`
我不知道你的 dql 事情,但关于在 Sonata 管理表视图中排序的一些事实。问题是,无论您在模型中"虚拟"做什么,排序操作仍然在后台使用数据库操作进行。如果仅向模型添加方法,则 datagrid 无法在排序中涉及此方法/属性。
我的经验是,您无法按相应表中物理上不可用的字段进行排序。即使您为自己编写了整个查询,如果您单击排序按钮,也会触发一个完整的其他查询,该查询将忽略您的请求。
如果有人告诉我相反的话,我会很高兴......
另请参阅此问题 https://github.com/sonata-project/SonataAdminBundle/issues/1077