我仍在与 QueryBuilder 学说作斗争,因为当我想将另一个元素添加到选择表达式中时,我认为它无法正常工作。
在这两种情况下,学说 $queryBuilder->getQuery()->getResults() 返回一个数组,其中实体表示为字符串而不是对象:
情况一:
$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
...
...
...
我也遇到过类似的问题。
我发现的答案相对简单..
$queryBuilder -> select('table.column1 alias1, table.column2 alias2');
使用逗号分隔,并在列后使用空格来放置列的别名。
EDIT:
您不能将对象与值混合在一起。您只能执行以下操作之一:
$qb -> select('tableAlias1', 'tableAlias2')
$qb -> from('table1','tableAlias1')
$qb -> leftJoin('table2','tableAlias2');
OR
$qb -> select('tableAlias1.column1', 'tableAlias2.column1')
$qb -> from('table1','tableAlias1')
$qb -> leftJoin('table2','tableAlias2');
如果您决定需要提取表顶部的某些列,则必须指定要从每个表中检索的每一列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)