【问题标题】:Doctrine query builder, select foreign key教义查询生成器,选择外键
【发布时间】:2014-04-07 12:34:11
【问题描述】:

我有这个问题:

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

我该怎么做?

【问题讨论】:

    标签: php mysql sql symfony doctrine-orm


    【解决方案1】:

    你需要在加入accountid时使用DISTINCT

    $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

    【讨论】:

      【解决方案2】:

      “实现这一点非常简单。只需将属性 shopId 与任何其他字段映射属性一样添加到产品实体中,使其与数据库表中的实际列相对应。确保将此属性置于关联之上属性“shop”,否则将无法按预期工作。”

      http://pietervogelaar.nl/doctrine-2-use-foreign-key-as-field-in-dql/

      注意:我使用的是定制的水合器。在将其与默认水合器一起使用时,我确实遇到了问题。

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

      【讨论】:

        猜你喜欢
        • 2015-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多