使用Doctrine phpcr-odm对sort_order排序结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Doctrine phpcr-odm对sort_order排序结果相关的知识,希望对你有一定的参考价值。

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

Symfony Profiler中记录的查询示例:

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

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

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

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

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

答案

谁说你不能用orderBy()?你应该read the docs因为肯定是可能的。使用相同的代码并将排序列假设为sort_order,请参见下文:

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

以上是关于使用Doctrine phpcr-odm对sort_order排序结果的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Doctrine 2 ODM 中的多个字段上使用 sort()?

如何将 phpcr-odm ReferenceMany 字段添加到奏鸣曲管理员?

Doctrine Querybuilder,绑定参数

Doctrine2 多对一关联不会使用 JOIN 查询

如何在 Doctrine 中使用 findBy() 对结果进行排序

如何在 Doctrine 中建立多对一关系?