Как 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
Спасибо, Матье за ответ, я прочитал доктрину, которую вы признаете. Итак, это сговор: либо создать одну супертаблицу и разместить пустые ячейки, либо использовать таблицы с возможностью соединения с внешним ключом. Я прав?
На мой взгляд, создание UNION будет дороже, чем использование таблицы с пустым столбцом.
К сожалению, UNION возвращает столбцы, которые находятся в первой таблице, поэтому, насколько я знаю, решение о выполнении запроса не может быть принято.
Используйте @InheritanceType("SINGLE_TABLE") в качестве аннотации к доктрине, он создаст столбец discr для каждого объекта.
Хорошо. И еще один вопрос: если в дочерних сущностях будут одинаковые поля, например city, будет ли он использовать один столбец таблицы или у него должно быть два разделенных?
Тот же столбец.
Большое спасибо, Матье!




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