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,':错误:如果不选择至少一个根实体别名,则无法通过标识变量选择实体.
我甚至在这个链接中看到过关于相同错误的帖子但没有成功.
我找到了解决方案:
$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()。