$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT p
FROM AcmeStoreBundle:Product p
WHERE p.price > :price
ORDER BY p.price ASC'
)->setParameter('price', '19.99');
$products = $query->getResult();
我对冒号以及它可以在查询中使用的不同位置有点困惑。 我认为:价格只是将价格声明为一个局部变量,然后在运行时将被19.99替换。
1)上述假设是否正确?
2)在DQL中是否有其他地方可以看到':',所以我不会将它与其他功能混淆。
答案 0 :(得分:3)
1) Is the aforementioned assumption correct?
是的,:price
实际上是parameter
,用于避免像这样的丑陋代码:
"SELECT ... WHERE p.price > " . $price
相反,请使用参数表示法,然后调用setParamter()
方法:
->setParameter('price', '19.99'); << Without prefix
2) Are there some other places you see the ':' in DQL so I don't confuse it with its other functions.
我不知道:)
答案 1 :(得分:2)
冒号:
运算符用于预准备语句。它类似于PHP中变量命名的$
字符,但专用于Doctrine。
您可能会注意到AcmeStoreBundle:Product
内部也有冒号,但这是一个Symfony功能,您可以在其中定义实体所属的Bundle。在Doctrine中没有其他方法可以使用运算符。