如果不选择至少一个根实体别名,则无法 select 实体通过标识变量
Cannot select entity through identification variables without choosing at least one root entity alias
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();
}
我得到的错误是:
[Semantical Error] line 0, col -1 near 'SELECT m.id,': Error: Cannot
select entity through identification variables without choosing at
least one root entity alias.
我什至在 this link 中看到过关于相同错误的 post 但没有成功。
尝试更改
->select("m.id, COUNT(m.id) AS cnt")
至
->select("m, COUNT(m.id) AS cnt")
或将 hydration 更改为数组
我找到了解决方案:
$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()。
这被称为 Doctrine 限制,您应该首先像这样加入 MotorAds 实体
from('MinnAdsBundle','mi')->leftJoin(MotorsAds::class,'m','WITH','mi.motorsAds = m');
然后您可以 select 直接形成 MotorsAds
参考这个
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();
}
我得到的错误是:
[Semantical Error] line 0, col -1 near 'SELECT m.id,': Error: Cannot select entity through identification variables without choosing at least one root entity alias.
我什至在 this link 中看到过关于相同错误的 post 但没有成功。
尝试更改
->select("m.id, COUNT(m.id) AS cnt")
至
->select("m, COUNT(m.id) AS cnt")
或将 hydration 更改为数组
我找到了解决方案:
$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()。
这被称为 Doctrine 限制,您应该首先像这样加入 MotorAds 实体
from('MinnAdsBundle','mi')->leftJoin(MotorsAds::class,'m','WITH','mi.motorsAds = m');
然后您可以 select 直接形成 MotorsAds
参考这个