@awda2dea

Как при SQL-запросе через репозиторий завести зависимости внешних таблиц?

PointsController.php on line 150:
App\Entity\PointsCities {#709 ▼
  -id: "1"
  -city: "City #1"
  -region_id: "2"
  -type: 1
}

Допустим есть repository, которая при запросе findAll возвращает некую коллекцию объектов класса PointsController. Но! Возвращаемые entity содержат только индексы(FKeys) на другие таблицы, из которых необходимо подтянуть, к примеру) строковые значения varchar. Я конечно могу написать SQL запрос при помощи QB, однако.. тогда возвращаемый результат будет типа array, и придётся перебирать весь массив, при этом еще и заполнять вектор из сущностей PointsController, в чем я не вижу смысла. Писать дополнительные запросы на извлечение данных со связанных таблиц - это еще +2 SQL лишних запроса, вообще абсурд полнейший. По сути одним запросом надо вытянуть данные смежных таблиц для region_id и type, которые в этих таблицах имеют конкретные имена типа varchar..

Тело сущности примерно выглядит так
class PointsCities
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="bigint", options={"unsigned" : true})
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=50)
     */
    private $city;

    /**
     * @ORM\Column(type="bigint", nullable=true, options={"unsigned" : true})
     * @ORM\ManyToOne(targetEntity="PointsRegions")
     * @ORM\JoinColumn(name="region_id", referencedColumnName="id")
     */
    private $region_id;

    /**
     * @ORM\Column(type="smallint", options={"unsigned" : true})
     * @ORM\OneToOne(targetEntity="PointsCityTypes")
     */
    private $type;

    ........
}


Модель базы данных выглядит так
6225a06c3b7a0142679254.png
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ответы на вопрос 1
Malverdo
@Malverdo
PHP Developer
в сущности нужно создавать ArrayCollection
one-to-many

название переменных должны быть CamelCase, заместо $region_id нужно $regions

насчёт Join doctrina работает по pattern proxy
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы