[php] 비교 기준으로 findBy 메서드를 사용하는 방법



1 Answers

Doctrine\ORM\EntityRepository 클래스는 Doctrine\Common\Collections\Selectable API를 구현합니다.

Selectable 인터페이스는 매우 유연하고 새롭지 만 ORM 또는 ODM 또는 완전히 별개의 문제가 아니더라도 저장소 및 항목의 단일 모음 모두에서 비교 및보다 복잡한 기준을 쉽게 처리 할 수 ​​있습니다.

Doctrine ORM 2.3.2 에서처럼 방금 요청한 비교 기준이됩니다.

$criteria = new \Doctrine\Common\Collections\Criteria();
$criteria->where($criteria->expr()->gt('prize', 200));

$result = $entityRepository->matching($criteria);

이 API의 주요 이점은 여기에 일종의 전략 패턴을 구현하고 저장소, 컬렉션, 지연 수집 및 Selectable API가 구현되는 모든 곳에서 작동한다는 것입니다.

이를 통해 저장소 ( findOneBySomethingWithParticularRule 과 같은)에 대해 작성한 수십 개의 특수 메서드를 제거하고 대신 이러한 특정 필터 중 하나를 나타내는 고유 한 조건 클래스를 작성하는 데 집중할 수 있습니다.

Question

비교 기준 (정확한 기준 만이 아님)을 사용하여 "마법 찾기"findBy 메소드를 사용해야합니다. 다른 말로하면, 나는 이렇게 할 필요가있다 :

$result = $purchases_repository->findBy(array("prize" => ">200"));

그래서 나는 상금이 200 이상인 모든 구매를 얻을 수 있습니다.




이제 Symfony 문서에 명시 적으로이 작업을 수행하는 방법이 나와 있습니다.

$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
    'SELECT p
    FROM AppBundle:Product p
    WHERE p.price > :price
    ORDER BY p.price ASC'
)->setParameter('price', '19.99');    
$products = $query->getResult();

http://symfony.com/doc/2.8/book/doctrine.html#querying-for-objects-with-dql






Related