Intereting Posts
Есть ли хороший универсальный HTTP-туннель MySQL MySQL? отправить массив данных (одинаковые значения ключа), используя php curl Запрос на перекрестный запрос заблокирован: проблема при отправке заголовков в запрос Angular2 на laravel Доктрина и составные уникальные ключи неожиданный «класс» (T_CLASS) только на удаленном (не на локальном) Как PDO не может возвращать строку, которую выполняет pg_query ()? простой сервер nusoap Glob не работает, когда имя каталога имеет специальные символы, такие как квадратные скобки "" Предупреждение: mysqli_stmt :: bind_param (): Число переменных не соответствует количеству параметров в подготовленном операторе в C: \ User .. \ on 148 Лучший способ защитить целостность запроса ajax Ссылки страницы ссылки на страницы неактивны. PHP изменить url в html Удалить текст после определенной точки Чтение и использование значений атрибутов XML Как проверить, имеет ли объект метод в Symfony2

Как использовать метод findBy со сравнительными критериями

Мне нужно будет использовать метод find-метода «волшебный искатель», используя сравнительные критерии (не только точные критерии). Другими словами, мне нужно сделать что-то вроде этого:

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

так что я бы получил все покупки, где премия выше 200.

Solutions Collecting From Web of "Как использовать метод findBy со сравнительными критериями"

Это пример использования класса Expr () – мне тоже это нужно было несколько дней назад, и мне потребовалось некоторое время, чтобы узнать, что такое точный синтаксис и способ использования:

 /** * fetches Products that are more expansive than the given price * * @param int $price * @return array */ public function findProductsExpensiveThan($price) { $em = $this->getEntityManager(); $qb = $em->createQueryBuilder(); $q = $qb->select(array('p')) ->from('YourProductBundle:Product', 'p') ->where( $qb->expr()->gt('p.price', $price) ) ->orderBy('p.price', 'DESC') ->getQuery(); return $q->getResult(); } 

Класс Doctrine\ORM\EntityRepository реализует Doctrine\ORM\EntityRepository Doctrine\Common\Collections\Selectable .

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 ), и вместо этого сосредоточиться на написании собственных классов критериев, каждый из которых представляет один из этих конкретных фильтров.

Вы должны использовать либо DQL, либо QueryBuilder . Например, в вашем Purchase- EntityRepository вы можете сделать что-то вроде этого:

 $q = $this->createQueryBuilder('p') ->where('p.prize > :purchasePrize') ->setParameter('purchasePrize', 200) ->getQuery(); $q->getResult(); 

Для еще более сложных сценариев взгляните на класс Expr () .

В документации 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

 $criteria = new \Doctrine\Common\Collections\Criteria(); $criteria->where($criteria->expr()->gt('id', 'id')) ->setMaxResults(1) ->orderBy(array("id" => $criteria::DESC)); $results = $articlesRepo->matching($criteria);