我有一个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()
吗?