[symfony] findAll Doctrine의 메소드 정렬 방법



Answers

$this->getDoctrine()->getRepository('MyBundle:MyTable')->findBy([], ['username' => 'ASC']);
Question

Doctrine의 문서를 읽었지만 findAll () 결과를 정렬 할 수있는 방법을 찾지 못했습니다.

나는 symfony2 + doctrine을 사용하고 있는데, 이것은 내 컨트롤러에서 사용하고있는 문장이다.

$this->getDoctrine()->getRepository('MyBundle:MyTable')->findAll();

하지만 사용자 이름을 오름차순으로 결과를 정렬하고 싶습니다.

이런 식으로 배열을 인수로 전달하려고했습니다.

findAll( array('username' => 'ASC') );

하지만 작동하지 않습니다 (불평하지 않습니다).

DQL 쿼리를 작성하지 않고이 작업을 수행 할 수있는 방법이 있습니까?




단순한:

$this->getDoctrine()->getRepository('AcmeBundle:User')->findBy(
    array(),
    array('username' => 'ASC')
);



이 시도:

$em = $this->getDoctrine()->getManager();

$entities = $em->getRepository('MyBundle:MyTable')->findBy(array(), array('username' => 'ASC'));



다음과 같은 기준을 사용해야합니다.

<?php

namespace Bundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\Common\Collections\Criteria;

/**
* Thing controller
*/
class ThingController extends Controller
{
    public function thingsAction(Request $request, $id)
    {
        $ids=explode(',',$id);
        $criteria = new Criteria(null, <<DQL ordering expression>>, null, null );

        $rep    = $this->getDoctrine()->getManager()->getRepository('Bundle:Thing');
        $things = $rep->matching($criteria);
        return $this->render('Bundle:Thing:things.html.twig', [
            'entities' => $things,
        ]);
    }
}



배열 반복자를 사용하여 기존 ArrayCollection을 정렬 할 수 있습니다.

findAll ()에 의해 반환 된 ArrayCollection이 $ collection이라고 가정합니다.

$iterator = $collection->getIterator();
$iterator->uasort(function ($a, $b) {
    return ($a->getPropery() < $b->getProperty()) ? -1 : 1;
});
$collection = new ArrayCollection(iterator_to_array($iterator));

이것은 findAllOrderBy () 메소드를 생성하기 위해 저장소에 넣을 수있는 함수로 쉽게 바뀔 수 있습니다.




Links