【问题标题】:Sonata Admin - Order List by calculated valueSonata Admin - 按计算值排列的订单列表
【发布时间】:2018-05-15 09:55:56
【问题描述】:

有没有办法让 Sonata Admin 列表中的一列使用计算值作为排序依据??

类似这样的:(这不起作用)

    $mapper->add('stock', null, [
        'sortable' => '(stock.real - stock.inCustomerOrder)',
    ]);

【问题讨论】:

  • 你试过添加树枝标签吗? 'sortable' => '{{ stock.real - stock.inCustomerOrder }}' 不确定这是否有效,无论如何这将是一个可怕的黑客攻击
  • 那行不通。

标签: symfony sonata-admin


【解决方案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 的包装器。
    猜你喜欢
    • 1970-01-01
    • 2015-09-05
    • 2019-04-21
    • 2016-07-09
    • 1970-01-01
    • 2015-05-15
    • 2016-07-25
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多