6

我仍在为学说 QueryBuilder 苦苦挣扎,因为当我想将另一个元素添加到选择表达式中时,我认为它无法正常工作。

在这两种情况下,学说 $queryBuilder->getQuery()->getResults() 返回一个数组,其中实体表示为字符串而不是对象:

情况1:

$queryBuilder = $this->em->createQueryBuilder();
$queryBuilder->select("e, 99 as number");

它返回

array(4) {
  [0]=>
     array(2) {
        [0]=> string(30) "Profile_Entity" //notice this is a string but it should be  an object instance 
        ["number"]=> string(2) "99"
     }
  ...
...

如果我会写

$queryBuilder = $this->em->createQueryBuilder();
$queryBuilder->select("e");
$queryBuilder->select("99 as number");

它将返回与情况 1 相同的内容

下面是它通常应该的样子(这里只是选择表达式中的一个元素)

array(4) {
  [0]=> object(stdClass)#935 (39) {
    ["__CLASS__"]=> string(30) "Profile_Entity"
    ["id"]=> int(46)
    ["headline"]=> string(7) "asdasd
    ...
  ...
...
4

1 回答 1

9

我正在努力解决类似的问题。

我找到的答案相对简单..

$queryBuilder -> select('table.column1 alias1, table.column2 alias2');

您使用逗号分隔,并在列后使用空格来放置列的别名。

编辑:

您不能将对象与值混合。您只能执行以下操作之一:

$qb -> select('tableAlias1', 'tableAlias2')
$qb -> from('table1','tableAlias1')
$qb -> leftJoin('table2','tableAlias2');

或者

$qb -> select('tableAlias1.column1', 'tableAlias2.column1')
$qb -> from('table1','tableAlias1')
$qb -> leftJoin('table2','tableAlias2');

如果您决定需要在表顶部提取某些列,则必须指定要从每个表中检索的每一列。

于 2013-07-22T05:41:07.340 回答