相关疑难解决方法(0)

原则:如果不选择至少一个根实体别名,则无法通过标识变量选择实体

我在查询构建器中使用以下代码,以选择平均得分值,以及该平均值所属的类别实体:

$queryBuilder = $this->createQueryBuilder('s')
    ->resetDQLPart('select')
    ->select('AVG(s.score) as score, partial c.{reviewCategoryID} as cat')
    ->setParameter('status', ReviewStatusType::ACCEPTED)
    ->join('s.review', 'r')
    ->join('s.category', 'c')
    ->where('r.campsite = :campsite')
    ->andWhere('r.status = :status')
    ->setParameter('campsite', $campsite)
    ->groupBy('c.reviewCategoryID');
Run Code Online (Sandbox Code Playgroud)

$campsite 是评论所属的实体,而评分属于评论,评分具有类别.

但是当我尝试执行此操作时,我收到错误

Error: Cannot select entity through identification variables without choosing at least one root entity alias.
Run Code Online (Sandbox Code Playgroud)

当我调试并检查根别名时,我看到's'已定义,应该是根实体(Score).

知道什么可能是错的吗?

doctrine doctrine-query doctrine-orm

16
推荐指数
1
解决办法
3万
查看次数

原则2:如果不选择至少一个根实体别名,则无法通过标识变量选择实体

而不是一个实际的问题,这对我自己来说是一个粘滞便笺,可能对其他人有帮助.还有许多其他类似的问题:1,2,3,4,5,6,但他们都不似乎提供了这种解决方案.


我有以下实体:

class Order
{
    // ...

    /**
     * @ManyToOne(targetEntity="Customer")
     * @var Customer
     */
    private $customer;

    /**
     * @Column(type="integer")
     * @var int
     */
    private $amount;
}

class Customer
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

Order与...具有单向,多对一的关系Customer.我想让每个客户以及他的订单总量,所以我运行以下DQL查询:

SELECT c, SUM(o.amount)
FROM Model\Order o
JOIN o.customer c
GROUP BY c
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

[Doctrine\ORM\Query\QueryException]
[语义错误]第0行,col-1靠近'SELECT c,SUM(o.amount)':错误:如果不选择至少一个根实体别名,则无法通过标识变量选择实体.

我该如何解决?

doctrine-orm

9
推荐指数
1
解决办法
4956
查看次数

标签 统计

doctrine-orm ×2

doctrine ×1

doctrine-query ×1