可以在Doctrine Query Builder中选择和参数化吗?

时间:2013-08-05 11:24:46

标签: mysql doctrine-orm

根据Doctrine's documentation it is possible to bind parameters to a query。例如:

$qb->select('u')
   ->from('User u')
   ->where('u.id = ?1')
   ->orderBy('u.name', 'ASC')
   ->setParameter(1, 100);

派生自this question我想知道是否可以参数化selectfrom语句?像

$qb->select('?1')
   ->from('?2 u')
   ->where('u.id = 2')
   ->orderBy('u.name', 'ASC')
   ->setParameters(array(1 => 'mytable', 2 => 'mycolumn'));

我没有设法这样做,但也许我只是不知道正确的方法。有人吗?

1 个答案:

答案 0 :(得分:2)

这是预处理语句与PDO一起使用的方式。查询和语句正在单独发送。这允许您的数据库计算查询的最佳查询路径。然后,查询路径使用参数来获得正确的结果。查询路径将尝试在下次进行相同查询时优化速度。所以对于select和你来说只需做select($select)。请注意,每次添加新选择都会丢失优化。

更新:
这是一个相关的答案:https://stackoverflow.com/a/182353/1833322

这是它在DQL中的外观示例:

$query = $em->createQuery('SELECT x FROM '.$mappingPlusEntity.' x WHERE x.id = ?1');
$query->setParameter(1, 321);