У меня простой запрос:
$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, не присоединяюсь?
Как я могу получить город, даже если у города нет улиц?
Если объектный Streets
объект отображаются в ваш 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
к вам, поскольку вы leftJoin
карту Streets
в City
, не должно быть никакого street.city
с NULL
значениемСоветы по хорошей практике: имена сущностей никогда не являются множественными