在Doctrine2中,我可以使用literal()代替参数吗?

时间:2018-06-01 13:22:16

标签: doctrine-orm doctrine-query

我有一个Doctrine QueryBuilder,我在一个周期中添加了andWhere()个表达式:

foreach($order->getOrderCartItems() as $cartItem){
    $completteQb->andWhere($completteQb->expr()->andX(
        $completteQb->expr()->eq(
            'c.completteId', $cartItem->getProductVariantId()
        ),
        $completteQb->expr()->eq(
           'c.orderId', $cartItem->getOrder()->getOrderId()
        )
    ));
}

由于$cartItem->getProductVariantId()$cartItem->getOrder()->getOrderId()是参数,因此应将它们作为参数添加,但为此我需要区分每次迭代中分配的参数,因此我的查询应如下所示:

foreach($order->getOrderCartItems() as $i => $cartItem){
    $completteQb->andWhere($completteQb->expr()->andX(
        $completteQb->expr()->eq(
            'c.completteId', ':param1'.$i
        ),
        $completteQb->expr()->eq(
            'c.orderId', ':param2'.$i
        )
    ))
    ->setParameter('param1'.$i, $cartItem->getProductVariantId())
    ->setParameter('param2'.$i, $cartItem->getOrder()->getOrderId());
}

但我想知道在这种情况下是否应该使用QueryBuilder->expr()->literal()制作参数文字就足够了?所以我的查询看起来像下面的那个,这是对的吗?

foreach($order->getOrderCartItems() as $cartItem){
    $completteQb->andWhere($completteQb->expr()->andX(
        $completteQb->expr()->eq(
            'c.completteId', $completteQb->expr()->literal($cartItem->getProductVariantId())
        ),
        $completteQb->expr()->eq(
            'c.orderId', $completteQb->expr()->literal($cartItem->getOrder()->getOrderId())
        )
    ));
}

我应该在ID等整数的情况下使用literal()吗?

0 个答案:

没有答案