집 >데이터 베이스 >MySQL 튜토리얼 >Doctrine 2의 쿼리 작성기와 함께 WHERE...IN 하위 쿼리를 사용하는 방법은 무엇입니까?
이 예에서는 SQL 쿼리 기능을 미러링하여 특정 항목이 포함된 주문과 연관된 주문 항목을 검색하는 방법을 보여줍니다.
동등한 SQL 쿼리:
<code class="language-sql">SELECT DISTINCT i.id, i.name, order.name FROM items i JOIN orders o ON i.order_id=o.id WHERE o.id IN ( SELECT o2.id FROM orders o2 JOIN items i2 ON i2.order_id=o2.id AND i2.id=5 ) AND i.id != 5 ORDER BY o.orderdate DESC LIMIT 10;</code>
Docrine 2 쿼리 작성기 구현:
<code class="language-php"><?php // Access Doctrine's ExpressionBuilder $expr = $em->getExpressionBuilder(); $qb = $em->createQueryBuilder(); $qb ->select(array('DISTINCT i.id', 'i.name', 'o.name')) ->from('Item', 'i') ->join('i.order', 'o') ->where( $expr->in( 'o.id', $em->createQueryBuilder() ->select('o2.id') ->from('Order', 'o2') ->join('Item', 'i2', \Doctrine\ORM\Query\Expr\Join::WITH, $expr->andX( $expr->eq('i2.order', 'o2'), $expr->eq('i2.id', '?1') ) ) ->getDQL() ) ) ->andWhere($expr->neq('i.id', '?2')) ->orderBy('o.orderdate', 'DESC') ->setParameter(1, 5) ->setParameter(2, 5);</code>
중요 고려 사항:
LIMIT
절을 처리하면 성능 제한이 발생할 수 있습니다.IN
절은 일반적으로 배열을 기대하지만 하위 쿼리도 수용합니다.id
인스턴스 모두에 대해 동일한 매개변수를 재사용하는 것은 일관성을 위해 권장되지만 엄격하게 요구되는 것은 아닙니다.위 내용은 Doctrine 2의 쿼리 작성기와 함께 WHERE...IN 하위 쿼리를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!