Sonata Admin - 按计算值排列的订单列表
Posted
技术标签:
【中文标题】Sonata Admin - 按计算值排列的订单列表【英文标题】:Sonata Admin - Order List by calculated value 【发布时间】:2018-05-15 09:55:56 【问题描述】:有没有办法让 Sonata Admin 列表中的一列使用计算值作为排序依据??
类似这样的:(这不起作用)
$mapper->add('stock', null, [
'sortable' => '(stock.real - stock.inCustomerOrder)',
]);
【问题讨论】:
你试过添加树枝标签吗?'sortable' => ' stock.real - stock.inCustomerOrder '
不确定这是否有效,无论如何这将是一个可怕的黑客攻击
那行不通。
【参考方案1】:
由于排序是基于数据库查询的,所以不能按虚拟/计算字段排序。
【讨论】:
【参考方案2】:既然这两个值来自同一个表,那么添加一个真实的列呢? (并且使用 Doctrine 侦听器,您可以在实体更改时保持同步)。
或者,您可以从此处的文档中覆盖 Sonata 生成的查询:https://sonata-project.org/bundles/admin/master/doc/reference/action_list.html#customizing-the-query-used-to-generate-the-list
【讨论】:
您可以在自定义查询中设置条件/where子句。但是您不能按派生值或计算值排序。 没试过,但你应该可以完全重写查询,$query 是 Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery,一个 Doctrine QueryBuilder 的包装器。以上是关于Sonata Admin - 按计算值排列的订单列表的主要内容,如果未能解决你的问题,请参考以下文章
Sonata Admin Bundle:按计数一对多关系排序
Sonata Admin:isGranted() 在 Admin 类中总是返回 true,但在模板中返回正确的布尔值