我有简单的查询:
$query = $qb->select('c, s')
->from('AppBundle:City', 'c')
->leftJoin('c.streets', 's')
->where('o.name = :name')
->setParameter('name', 'London')
->andWhere('s.numbers > :number')
->setParameter('number', 10000);
$result = $query->getQuery()->getOneOrNullResult();
我想通过关系获得城市和街道。如果城市和街道的数字> 10000存在此查询工作正常,但如果城市存在且没有数字> 10000然后此查询返回null。为什么,如果我使用leftJoin,不加入?
即使城市没有街道,我怎样才能获得城市?
答案 0 :(得分:0)
如果您的实体City
实体已映射到您的{% for steet in city.streets %}
<div>steet.name</div>
<div>steet.length</div>
<div>steet.etc</div>
{% endfor %}
实体,那么您不需要此类查询。
在树枝上,只需这样做:
public function getCityStreets(City $city, $street) {
// param $city :: Entity City
// param $street :: Integer
return $this->createQueryBuilder()
->select('c', 's')
->from('AppBundle:City', 'c')
->join('AppBundle:Streets', 's')
->where('c.name = :city')
->andWhere('s.number = :street_number')
->andWhere('s.city = :street_city)
->setParameters(array(
new Parameter('city', $city->getName()),
new Parameter('street', $street),
new Parameter('street_city', $city->getId()),
))
->getQuery()
->getArrayResult();
}
否则,要更正您的查询,它应该是这样的:
o.name
o
在您的查询中无效... 'c.streets', 's'
未设置在任何地方Steets
也无效,您可以加入City
,但不能加入leftJoin
join
映射到Streets
时,City
可以是street.city
,不应该有NULL
src
值< / LI>
良好做法提示:实体名称永远不会复数