我有这个问题:
$qb = $this->_em->createQueryBuilder();
$qb->select('DISTINCT c.account')
->from('ThanksWhoProjectBundle:Comment', 'c')
->leftjoin('c.account', 'a')
->where('c.conversation = ?1')
->setParameters(array(1 => $conversation));
return $qb->getQuery()->getResult();
因此,字段Comment.account
是我的实体Account
的外键。我只需要检索对话中的所有不同帐户。
所以,我想只选择字段c.account
,但是这个查询有这个错误:
[Semantical Error] line 0, col 18 near 'account FROM': Error: Invalid PathExpression. Must be a StateFieldPathExpression. (500 Internal Server Error)
我该怎么做?
答案 0 :(得分:2)
您需要在加入的DISTINCT
account
上使用id
:
$qb = $this->_em->createQueryBuilder();
$qb->select('DISTINCT a.id') // note 'a.id'
->from('ThanksWhoProjectBundle:Comment', 'c')
->leftjoin('c.account', 'a')
->where('c.conversation = ?1')
->setParameters(array(1 => $conversation));
return $qb->getQuery()->getResult();
从官方文档:http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html
答案 1 :(得分:1)
“实现这一点非常简单。只需将属性shopId作为任何其他字段映射属性添加到产品实体,并使其与数据库表中的实际列对应。确保将此属性设置为关联财产“商店”,否则将无法按预期工作。“
http://pietervogelaar.nl/doctrine-2-use-foreign-key-as-field-in-dql/
注意:我使用的是定制保湿剂。使用默认保湿器时,我确实遇到了问题。
很好,没有更多不必要的连接只读查询!我不确定尝试更新结果集中的对象时会产生什么影响。