IT TIP

교리 및 LIKE 쿼리

itqueen 2021. 1. 9. 11:11
반응형

교리 및 LIKE 쿼리


나는 교리에 대한 실체가 있습니다.

<?php
/**
 * @Entity
 * @Table(name="orders")
 */
class Orders {
    /** @Id @Column(name="OID",type="integer") @GeneratedValue */
    private $id;
    /** @Column(name="Product",type="string")*/
        private $product;
    /** @Column(name="RegCode",type="string")*/
        private $reg_code;
    /** @Column(name="OrderEmail",type="string")*/
    private $email;
}

다음과 같은 쿼리가 필요합니다.

select * from `orders` where `OrderEmail`='some@mail.com' and `Product` LIKE 'My Products%'

나는 다음과 같이 쿼리를 처리하려고 시도합니다.

$em->getRepository("Orders")->findByEmailAndProduct($uname,$product);

그러나 그것은 오류를 만듭니다. 왜? DQL없이이 쿼리를 수행 할 수 있습니까? 이 쿼리에 findBy 매직 메서드를 사용하고 싶습니다 **


매직 찾기 방법으로는 불가능합니다. 쿼리 작성기를 사용해보십시오 .

$result = $em->getRepository("Orders")->createQueryBuilder('o')
   ->where('o.OrderEmail = :email')
   ->andWhere('o.Product LIKE :product')
   ->setParameter('email', 'some@mail.com')
   ->setParameter('product', 'My Products%')
   ->getQuery()
   ->getResult();

createQuery방법을 사용할 수 있습니다 (컨트롤러에서 직접) :

$query = $em->createQuery("SELECT o FROM AcmeCodeBundle:Orders o WHERE o.OrderMail =  :ordermail and o.Product like :searchterm")
->setParameter('searchterm', '%'.$searchterm.'%')
->setParameter('ordermail', 'some@email.com');

번들 이름과 일치하도록 AcmeCodeBundle을 변경해야합니다.

또는 더 나은 방법-엔터티에 대한 저장소 클래스를 만들고 거기에 메서드를 만듭니다. 이렇게하면 다시 사용할 수 있습니다.


매직 메서드로는 불가능하지만 DQL ( Doctrine Query Language )을 사용하면 가능 합니다. 귀하의 예에서 Orders with Product 속성이라는 엔티티가 있다고 가정하고 계속 진행하여 다음을 수행하십시오.

$dql_query = $em->createQuery("
    SELECT o FROM AcmeCodeBundle:Orders o
    WHERE 
      o.OrderEmail = 'some@mail.com' AND
      o.Product LIKE 'My Products%'
");
$orders = $dql_query->getResult();

Should do exactly what you need.


Actually you just need to tell doctrine who's your repository class, if you don't, doctrine uses default repo instead of yours.

@ORM\Entity(repositoryClass="Company\NameOfBundle\Repository\NameOfRepository")


you can also do it like that :

$ver = $em->getRepository('GedDocumentBundle:version')->search($val);

$tail = sizeof($ver);

ReferenceURL : https://stackoverflow.com/questions/8164682/doctrine-and-like-query

반응형