>데이터 베이스 >MySQL 튜토리얼 >Doctrine 2의 쿼리 작성기와 함께 WHERE...IN 하위 쿼리를 사용하는 방법은 무엇입니까?

Doctrine 2의 쿼리 작성기와 함께 WHERE...IN 하위 쿼리를 사용하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-13 21:54:47289검색

How to Use a WHERE...IN Subquery with Doctrine 2's Query Builder?

Docrine 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>

중요 고려 사항:

  • Doctrine 2에서 하위 쿼리의 LIMIT 절을 처리하면 성능 제한이 발생할 수 있습니다.
  • IN 절은 일반적으로 배열을 기대하지만 하위 쿼리도 수용합니다.
  • id 인스턴스 모두에 대해 동일한 매개변수를 재사용하는 것은 일관성을 위해 권장되지만 엄격하게 요구되는 것은 아닙니다.

위 내용은 Doctrine 2의 쿼리 작성기와 함께 WHERE...IN 하위 쿼리를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.