我有一个简单的问题:
$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();
我想通过关系获取City和streets。如果存在数字大于10000的城市和街道,则此查询工作正常,但是如果城市存在,但没有数字大于10000,则此查询返回null。为什么,如果我使用leftJoin,而不是join?
即使城市没有街道,我怎么去城市呢?
发布于 2018-02-05 12:22:19
如果您的实体Streets
实体映射到您的City
实体,那么您就不需要这样的查询。
在twig中,只需执行以下操作:
{% 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
在您的查询中无效...未设置值anywhere'c.streets', 's'
也无效,您可以连接Steets
,但不能将来自City
leftJoin
的列作为join
,因为您已将Streets
映射到City
,因此不应该有任何具有NULL
值的良好实践提示:实体名称永远不能复数
https://stackoverflow.com/questions/48620646
复制