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 中的列表视图

Sonata Admin - 更改过滤器值(关系字段)

Sonata Admin:isGranted() 在 Admin 类中总是返回 true,但在模板中返回正确的布尔值

Sonata admin 所有元素它计算的不是所有元素,而是它有多少页

Sonata Admin 的 sonata_type_model 字段的自定义选项列表