Сортировка результатов по sort_order с помощью Doctrine phpcr-odm

Используя класс Document с PHPCR-ODM, можно получить результаты из репозитория классов, результаты автоматически сортируются по полю sort_order, которое находится не в классе Document, а в схеме базы данных.

Пример запроса, зарегистрированного в 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.

Итак, как я могу отсортировать результаты?


person loicb    schedule 19.12.2017    source источник
comment
Все еще сбивает с толку, прочитайте еще раз, результаты автоматически сортируются по полю sort_order, которое не находится в классе Document, а затем позже. Результат не сортируется по полю sort_order, как другие запросы, вы хотите, чтобы ваш запрос сортировался по такому столбцу sort_order? С другой стороны, я не знаю, как остальные запросы автоматически сортируются по sort_order, потому что, насколько мне известно, это невозможно, может быть, я ошибаюсь   -  person ReynierPM    schedule 20.12.2017


Ответы (1)


Кто сказал, что нельзя использовать orderBy()? Вам следует прочтите документы, потому что это, безусловно, возможно. Используя тот же код и приняв столбец сортировки как sort_order, см. ниже:

$qb->from()
   ->document('AppBundle\Document\Product', 'product')
   ->end()
   ->where()
   ->neq()->field('product.type')->literal('category')
   ->orderBy()->desc()->field('product.sort_order');
person ReynierPM    schedule 19.12.2017
comment
Я могу использовать orderBy(), но не с этим полем, потому что оно не входит в мой класс Document. - person loicb; 19.12.2017
comment
Тогда как вы собираетесь сортировать по чему-то, чего нет в вашем документе? Это не имеет никакого смысла для меня!!! Является ли sort_order исходящим из любого другого документа, тогда просто используйте JOIN в своем QB, чтобы добраться до такого столбца, где бы он ни находился, и примените ту же концепцию, что и в моем ответе. - person ReynierPM; 19.12.2017
comment
При использовании метода find() в классе DocumentRepository результаты сортируются по этому полю. Например: SELECT path FROM phpcr_nodes WHERE parent = ? AND workspace_name = ? ORDER BY sort_order ASC - person loicb; 19.12.2017
comment
Я сейчас в замешательстве, извините, но я не понимаю вас, не могли бы вы уточнить свой вопрос? - person ReynierPM; 19.12.2017
comment
Я обновил свой первоначальный пост, надеюсь, теперь он более понятен. Спасибо. - person loicb; 20.12.2017