Doctrine查询构建器,选择外键

时间:2014-04-07 12:34:11

标签: php mysql sql symfony doctrine-orm

我有这个问题:

        $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)

我该怎么做?

2 个答案:

答案 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/

注意:我使用的是定制保湿剂。使用默认保湿器时,我确实遇到了问题。

很好,没有更多不必要的连接只读查询!我不确定尝试更新结果集中的对象时会产生什么影响。