2014-10-31 47 views
1

我想选择数组中给出的列,然后根据这些列进行分组,但我无法弄清楚如何通过在Doctrine中的select()传递数组值。我试过了一堆不同的变化,我无法让它工作。 $因数只是一个标准数组,其列名称为值。在Doctrine QueryBuilder中从数组中选择列

$qb->select(":factors") 
    ->from("Table") 
    ->where("type = :type") 
    ->groupBy(":factors") 
    ->setParameter("factors", $factors) 
    ->setParameter("type", $type); 

回答

1

参数不在SELECT声明中使用。阅读关于prepared statements in PDO,Doctrine只是使用这个功能。

它们仅用于与存储的数据库值进行比较,而不是列或表名称。准备好的语句基本上可以帮助您避免在查询中使用这些值,对于包含"'的字符串可能有点困难。

如果你想用你的$factors数组变量选择statments你可以只是做

$qb->select(implode(',', $factors)) 

但在这种情况下,你必须防止自己注入攻击。最好的办法是在$factors中有一个允许值的白名单。

同样适用于GROUP BY声明。