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

Symfony 如果不选择至少一个根实体别名,则无法通过标识变量选择实体,symfony,join,doctrine-orm,inner-join,dql,Symfony,Join,Doctrine Orm,Inner Join,Dql,Ads实体由地理信息描述:国家>地区>县。Ads实体仅与县链接。因此,按国家检索广告将需要我们两次加入实体 我的目标是统计一个国家的广告数量。为此,我尝试了这个DQL查询,但没有成功: public function getMotorsAdsCountByCountry($slug){ $qb = $this->_em->createQueryBuilder() ->select("m.id, COUNT(m.id) AS cnt&qu

Ads
实体由地理信息描述:国家>地区>县
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();
}
我得到的错误是:

[Semantical Error]第0行,列-1靠近“SELECT m.id.”:错误:无法 通过标识变量选择实体,而不选择at 至少一个根实体别名

我甚至在中看到一篇关于相同错误的帖子,但没有成功。

尝试更改

->select("m.id, COUNT(m.id) AS cnt")

或者更改为数组

我找到了解决方案:

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

除了对select()的修改之外,我刚刚删除了addSelect()。

这被称为条令限制,您应该首先像这样加入MotorAds实体

from('MinnAdsBundle','mi')->leftJoin(MotorsAds::class,'m','WITH','mi.motorsAds = m');
然后,您可以直接选择表单MotorsAds 参考此

我尝试了
->select(“m,COUNT(m.id)AS cnt”)
->select(array(“m”,“COUNT(m.id)AS cnt”)
,但都没有成功!我得到的错误是:500内部服务器错误-UnuniquereSultException
from('MinnAdsBundle','mi')->leftJoin(MotorsAds::class,'m','WITH','mi.motorsAds = m');