Запрос нескольких похожих моделей одним запросом

Как Symfony может реализовать запрос, отвечающий нескольким моделям?

Представьте, что у нас есть 3 модели: Adv, AdvT1 extends Adv и AdvT2 extends Adv.

Таким образом, цель состоит в том, чтобы извлечь все модели AdvT1 и AdvT2 из результата запроса, где соответствующий тип модели установлен в столбце таблицы adv.

SELECT * FROM ONLY adv NATURAL FULL JOIN adv_t1 NATURAL FULL JOIN adv_t2 order by id;

Схема таблиц:

CREATE TABLE public.adv (
    id integer NOT NULL,
    title text,
    price integer
);

CREATE TABLE public.adv_t1 (
    size integer
) INHERITS (public.adv);

CREATE TABLE public.adv_t2 (
    color integer
) INHERITS (public.adv);

Вот анализ объяснения запросов, где сравнивается левое соединение с естественным соединением.

"SELECT * FROM ONLY adv NATURAL FULL JOIN adv_t1 NATURAL FULL JOIN adv_t2 order by id"; 

Стоимость - 245,87; Продолжительность - 0,132

"SELECT * FROM adv LEFT JOIN adv_t1 ON adv_t1.id = adv.id LEFT JOIN adv_t2 ON adv_t2.id = adv.id order by adv.id"; 

Стоимость - 1538,94; Продолжительность - 0,059

Пожалуйста, посмотрите: docs.doctrine-project.org/projects/doctrine-orm/en/latest/…

Weenesta - Mathieu Dormeval 29.03.2018 13:06

Спасибо, Матье за ​​ответ, я прочитал доктрину, которую вы признаете. Итак, это сговор: либо создать одну супертаблицу и разместить пустые ячейки, либо использовать таблицы с возможностью соединения с внешним ключом. Я прав?

parashutiki 29.03.2018 13:35

На мой взгляд, создание UNION будет дороже, чем использование таблицы с пустым столбцом.

Weenesta - Mathieu Dormeval 29.03.2018 13:38

К сожалению, UNION возвращает столбцы, которые находятся в первой таблице, поэтому, насколько я знаю, решение о выполнении запроса не может быть принято.

parashutiki 29.03.2018 13:45

Используйте @InheritanceType("SINGLE_TABLE") в качестве аннотации к доктрине, он создаст столбец discr для каждого объекта.

Weenesta - Mathieu Dormeval 29.03.2018 13:46

Хорошо. И еще один вопрос: если в дочерних сущностях будут одинаковые поля, например city, будет ли он использовать один столбец таблицы или у него должно быть два разделенных?

parashutiki 29.03.2018 14:03

Тот же столбец.

Weenesta - Mathieu Dormeval 29.03.2018 14:07

Большое спасибо, Матье!

parashutiki 29.03.2018 16:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
8
26
0

Другие вопросы по теме