【问题标题】:Sort results by sort_order with Doctrine phpcr-odm使用 Doctrine phpcr-odm 按 sort_order 对结果进行排序
【发布时间】:2017-12-19 11:44:11
【问题描述】:

使用带有PHPCR-ODM 的Document 类,可以使用fetch results with the class repository,结果将自动按不在Document 类中而是在数据库模式中的字段sort_order 排序。

在 Symfony Profiler 中记录的查询示例:

SELECT path FROM phpcr_nodes WHERE parent = ? AND workspace_name = ? ORDER BY sort_order ASC

我用 queryBuilder 构建了这个简单的查询:

$qb->from()
        ->document('AppBundle\Document\Product', 'product')
        ->end()
        ->where()
        ->neq()->field('product.type')->literal('category');
$query = $qb->getQuery();

结果不像其他查询那样按字段sort_order排序,我不能使用orderBy方法,因为这不是Document类的字段。

那么,如何对结果进行排序?

【问题讨论】:

  • 还是一头雾水,再读一遍“结果自动按不在 Document 类中的字段sort_order 排序”然后再读“结果不像其他查询那样按字段sort_order 排序” ",您是否希望您的查询按 sort_order 列排序?另一方面,我不知道其余查询是如何按sort_order“自动”排序的,因为 AFAIK 这不可能,也许我错了

标签: php doctrine-orm doctrine-odm doctrine-phpcr


【解决方案1】:

谁说你不能使用orderBy()?你应该read the docs,因为这当然是可能的。使用相同的代码并假设排序列为sort_order,如下所示:

$qb->from()
   ->document('AppBundle\Document\Product', 'product')
   ->end()
   ->where()
   ->neq()->field('product.type')->literal('category')
   ->orderBy()->desc()->field('product.sort_order');

【讨论】:

  • 我可以使用orderBy(),但不能用于此字段,因为它不在我的 Document 类中。
  • 那么您希望如何按照文档中没有的内容进行排序?这对我来说没有任何意义!!! sort_order 是否来自任何其他文档,然后只需在您的 QB 中使用 JOIN 即可到达该列,无论它在哪里,并应用与我的回答中显示的相同的概念
  • 在 DocumentRepository 类上使用find() 方法时,hte 结果按此字段排序。例如:SELECT path FROM phpcr_nodes WHERE parent = ? AND workspace_name = ? ORDER BY sort_order ASC
  • 我现在很困惑,对不起,我没有关注你,你能重新阐述你的问题吗?
  • 我已经更新了我最初的帖子,希望现在更清楚。谢谢。
猜你喜欢
  • 2012-12-31
  • 2017-02-01
  • 1970-01-01
  • 2012-08-16
  • 2018-07-25
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 2013-12-07
相关资源
最近更新 更多