$posts = $qb
->select('p')
->from('MyBundle\Entity\Post', 'p')
->getQuery()
->getArrayResult();
上面的查询将返回类似这样的内容(+99列)
id | title | url | .... many columns here ..... | created_at
---|--------------------------------|-------------------------------|--------------------
1 | hello | http://www.google.com/ | | - | - | - | - | - | - | 2017-01-01 00:00:00
2 | world | http://www.yahoo.com/ | | - | - | - | - | - | - | 2017-01-01 00:00:00
但是,此表有一个FK(user_id),它引用表“user”。问题是:查询不会将FK列带入查询结果。我测试过,当结果被水合成一个数组(getArrayResult)时,它会忽略结果上的FK,当结果被水化为一个对象(getResult)时,它会带来FK的结果。好的,我读了这篇有用的帖子(http://shout.setfive.com/2015/01/31/including-foreign-keys-in-doctrine2-array-results/)并想出了一种检索FK的方法,如下面的代码所示(不确定这是否是合适的方式,但是在工作中)
$posts = $qb
->select('p')
->from('MyBundle\Entity\Post', 'p')
->getQuery()
->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true)
->getArrayResult();
尽管如此,我还面临另一个我目前无法解决的问题。正如我所说,这个表有+99列。但是,我不想要所有这些。 我想要的只是+99 中的3个。以下代码正常工作,直到......
$posts = $qb
->select(array('p.id', 'p.url'))
->from('MyBundle\Entity\Post', 'p')
->getQuery()
->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true)
->getArrayResult();
...直到我在select上添加“p.user”,它代表FK(参见表用户,列id)。
$posts = $qb
->select(array('p.id', 'p.url', 'p.user'))
->from('MyBundle\Entity\Post', 'p')
->getQuery()
->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true)
->getArrayResult();
这就是我得到的:
[Doctrine\ORM\Query\QueryException]
[Semantical Error] line 0, col 10 near 'user FROM MyBundle\Entity\Post': Error: Invalid PathExpression. Must be a StateFieldPathExpression.
答案 0 :(得分:1)
尝试类似
的内容->select(array('p.id', 'p.name', IDENTITY(p.user))
这将返回用户的标识符/外键。
我从未使用select(array())
符号,因此我的示例可能无法开箱即用。但IDENTITY(entity.association)
是您正在寻找的。 p>
答案 1 :(得分:0)
这是:
$posts = $qb
->select(array('p.id', 'p.url', 'u.id')) // u.id is your user id, change if your user id is different
->from('MyBundle\Entity\Post', 'p')
->leftJoin('MyBundle\Entity\User', 'u')
->getQuery()
->getArrayResult()
;