2016-08-03 1 views
-1

Doctrine/Symfony를 처음 접했고이 작업을 수행 할 수 없기 때문에 머리를 잡아 당깁니다.Doctrine을 사용하여 관련 테이블의 행을 필터링하십시오.

하나의 외래 키와 관련된 두 개의 테이블이 있습니다.

Product: id, name, stock 
Order: id, date, productId, quantity, sent 

나는 $produt->getOrders() 하나 개의 제품의 모든 주문을받을 수 있지만 난 단지 그 전송에 계류되어있는 을 좀하고 싶습니다.

어떻게해야합니까?.

감사합니다. 당신은 많은 제품에 대한 모든 주문을하려는 경우

+0

Symfony/Doctrine Entities가 어떻게 보이는지 알고 있으면 좋을 것입니다. ORM Framework Doctrine 덕분에 데이터베이스 표현은 신경 쓸 필요가 없지만 엔티티는 신경 쓸 필요가 없습니다. Doctrine을 사용하면 네임 스페이스와 Entity 속성을 사용하여 쿼리를 생성 할 수 있습니다. – kinske

답변

0

당신은 QueryBuilder 사용할 수 있습니다

$this->createQueryBuilder('order') 
->join('order.productId', 'order') 
->where('order.sent = :sentStatus')->setParameter('sentStatus', true) 
->getQuery() 
->getResult(); 

을 이미 제품 개체/엔티티가 제품 당 주문을 선택합니다 :

$this->createQueryBuilder('order') 
->join('order.productId', 'order') 
->where('order.sent = :sentStatus')->setParameter('sentStatus', true) 
->where('product = :productEntity')->setParameter('productEntity', $productEntity) 
->getQuery() 
->getResult(); 

만약 당신 돈 QueryBuilder을 사용하고 싶습니다. 주문 컬렉션을 루프하거나 필터링 할 수 있습니다. details

Lazy Loading 그것은 impact to performance

0

당신은 두 가지 방법으로이 작업을 수행 할 수 있습니다

class SomeServiceOrController() { 

    function getOrdersPending($productId) { 

     return $this->getEntityManager()->createQueryBuilder() 
      ->select('order') 
      ->from('\AppBundle\Order', 'order') // or whatever your namespace your Entity is 
      ->join('order.productId', 'product') 
      ->where('order.productId =: productParam') 
      ->andWhere('order.sent = :sentParam') 
      ->setParameter('productParam', $productId) 
      ->setParameter('sentParam', 'pending') 
      ->getQuery() 
      ->getResult; 
    } 
} 

가 기준 here를 참조하십시오

먼저 (내가 추천 할 것)이 같은 QueryBuilder를 사용하는 것입니다.

두 번째는 DQL (Doctrine Query Language)입니다. 사용법은 this 참조를 참조하십시오. PHP와 거의 비슷하게 PHP 네임 스페이스를 사용합니다.

관련 문제