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

Ami*_*uli 5 join inner-join dql symfony doctrine-orm

Ads实体由地理信息描述:国家>地区>县.该Ads实体仅与之相关联County.因此,Ads按国家/地区检索将要求我们两次加入实体.

我的目标是计算特定国家/地区的广告数量.为此,我尝试了这个DQL查询,但没有成功:

public function getMotorsAdsCountByCountry($slug){
    $qb = $this->_em->createQueryBuilder()
            ->select("m.id, COUNT(m.id) AS cnt")
            ->from("MinnAdsBundle:MotorsAds", "m")
            ->join("m.county","county")->addSelect("county")
            ->join("county.region","region")->addSelect("region")
            ->join("region.country","country")->addSelect("country")
            ->where("country.slug=:slug")
            ->setParameter(":slug", $slug);
    return $qb->getQuery()->getSingleScalarResult();
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

[语义错误]第0行,第-1行靠近'SELECT m.id,':错误:如果不选择至少一个根实体别名,则无法通过标识变量选择实体.

我甚至在这个链接中看到过关于相同错误的帖子但没有成功.

Ami*_*uli 5

我找到了解决方案:

    $qb = $this->_em->createQueryBuilder()
            ->select("COUNT(m.id) AS cnt")
            ->from("MinnAdsBundle:MotorsAds", "m")
            ->join("m.county","county")
            ->join("county.region","region")
            ->join("region.country","country")
            ->where("country.slug=:slug")
            ->setParameter(":slug", $slug);
Run Code Online (Sandbox Code Playgroud)

除了修改select()之外,我还删除了addSelect()。