【问题标题】:Doctrine query error on leftJoinleftJoin 上的教义查询错误
【发布时间】:2017-03-18 02:05:46
【问题描述】:

我写了这个查询。

$query = $this->getEntityManager()->createQueryBuilder();
    $query->select(['cart','subscriptions', 'member'])
    ->from('ComitiUserBundle:Cart', 'cart')
    ->leftJoin('cart.subscriptions', 'subscriptions')
    ->leftJoin('subscriptions.member', 'member')
    ->where('cart.club = :club_id')
    ->andWhere('subscriptions.clubSeason = :season_id')
    ->setParameter('club_id', $club)
    ->setParameter('season_id', $season);
    if($section != null && !is_array($section)){
        $query->andWhere('subscriptions.section = :section_id')
        ->setParameter('section_id', $section);
    } elseif($section != null && is_array($section)){
        $query->andWhere('subscriptions.section IN :section_ids')
        ->setParameter('section_ids', $section);
    }
    $query->orderBy('cart.transaction_date','DESC');

    return $query->getQuery()->getResult();

我得到了这个错误作为回报:

[语法错误] 第 0 行,第 28 列:错误:预期标识变量 |标量表达式 |聚合表达式 |功能声明 |部分对象表达式 | "(" 子选择 ")" | CaseExpression,得到“成员”

事实上,我尝试将我的结果集合与其中的成员结合起来。 Member 是我的 Subscription 实体中的 manyToOne 属性。它是这样定义的:

/**
 * @ORM\ManyToOne(targetEntity="Comiti\UserBundle\Entity\UserComiti", inversedBy="subscriptions", cascade={"persist"})
 * @ORM\JoinColumn(name="member_id", referencedColumnName="id")
 */
protected $member;

【问题讨论】:

  • 查看错误。错误说你在子查询中有语法错误
  • 您发布的内容似乎正确。注释掉第二个 leftJoin 之后的所有内容,以验证它是联接。当然,如果您只是修改了关联,请执行清除缓存。
  • 您发布的查询是在控制器中还是在存储库中?如果是存储库,它与哪个实体有关?

标签: symfony doctrine-orm


【解决方案1】:

因此,在尝试为类别实体加入类别组时,我遇到了完全相同的错误。请看下面的代码:

    $qb = $this->entityManager->createQueryBuilder()
            ->select('c')
            ->from(Category::class, 'c');

        if (isset($fields['categoryGroup'])) {
            $qb = $qb->join('c.categoryGroup', 'group')
                ->addSelect('group');
        }

        $qb = $qb->getQuery()
            ->getArrayResult();

这导致与 OP 完全相同的错误,只是使用“组”。我的猜测是您不能在查询中使用数据库保留字,例如 groupmember

对我来说,将别名更改为 cg 这样就可以了。

【讨论】:

  • 有同样的问题,使用'as'作为别名。您的帖子有帮助,谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
相关资源
最近更新 更多