Как получить один с детьми?

0

У меня простой запрос:

    $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, не присоединяюсь?

Как я могу получить город, даже если у города нет улиц?

  • 1
    Условие на внутренней таблице внешнего соединения должно быть AND для ON, иначе оно превращает соединение во внутреннее соединение.
  • 0
    @ Dnoeth так, как я могу сделать это?
Показать ещё 4 комментария
Теги:
symfony-3.3

1 ответ

0

Если объектный 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 значением

Советы по хорошей практике: имена сущностей никогда не являются множественными

Ещё вопросы

Сообщество Overcoder
Наверх
Меню