Вопрос по доктрине знатокам: есть 3 сущьности (A,B,C) хочется настроить связть А

с B или C, то есть методом скажем A->getRelation() я хочу получить либо B либо C
В и С не наследуются друг от друга, но имплементируют один интерфейс
я вполне представляю как такое сделать в базе (заводим 2 поля, одно для уникального ключа сущьности, второе для названия сушьности), вопрос в том, возможно ли такое сделать в терминах доктрины, без своих костылей?

5 ответов

7 просмотров

Вроде сюда подходит Inheritance Mapping Наследуешь B и C от общей сущности. Эту общую сущность объявляешь как MappedSuperClass , и спомощью поля-дискриминатора даешь доктрине понять какой класс где использовать /** * @MappedSuperclass * @DiscriminatorColumn(name=«type», type="string") * @DiscriminatorMap({«a» = «ClassA», «b» = «Class»B}) **/ Потом создаешь связь из А на этот MappedSuperclass. Можно даже раскидать разных наследников по разным таблицам БД если нужуно. Как-то так.

Андрей-Поляничко Автор вопроса
Jeka Kovtun
Вроде сюда подходит Inheritance Mapping Наследуешь...

Да, я так делал, но в данном случае сущности уже заведены в базе (и там много записей и связей между ними), подсунуть им теперь общего предка представляется весьма трудоемкой задачей (коллизии id), но уже не важно, я пошел по пути рефакторинга с вынеманием общего функционала в отдельную сущность (сделал композицию заместо наследования) спасибо

Андрей Поляничко
Да, я так делал, но в данном случае сущности уже з...

Ну как раз для такого можно указывать в каждом наследнике свою таблицу. Но раз уже решил, то ок )))

Андрей-Поляничко Автор вопроса
Jeka Kovtun
Ну как раз для такого можно указывать в каждом нас...

там таблица то у всех будет отдельная да, но id нужен общий если я правильно помню, там создается отдельная таблица родитель, в которой будут лежать поля абстрактоного класа, в частности id и этот id должен быть сквозным длявсех наследников (тоесть толжен быть только один наследник с id=1 и т.д.). В ситуации когда уже есть куча записей с id и на эти записи ссылаются другие таблицы..... В общем то можно сделать новый сурагатный ключь, но это както грязно чутка:)

Андрей Поляничко
там таблица то у всех будет отдельная да, но id ну...

Вот тут задумался. У меня Doctrine с MongoDB, и там нет никакой коллекции родителя. Теоретически ID могут пересекатся, так в ссылке есть не только ID а ещё и тип (дискриминант). Другое дело что в монге в принципе ID по всей БД не могут пересекатся. ))) Интересно как это под капотом в случае с ORM а не ODM.

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

Обсуждают сегодня

Добрый день, не подскажите, если в OC-V3 поменять страндартную директорию /storage/ на /storage2/ - не будет сильно много проблем ?
Max Dubovsky
32
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
А сколько часов мак держит зарядку в рабочем режиме? Например мой Redmi Mac (просто наклейка от айфона осталась, налепил) по началу держал часов 5 с парой открытых штормов и ...
Ross
8
Каким то образом можно определить ширину экрана пользователя перед загрузкой partial-а? Надо рассчитать ширину кадров слайдера для ресайза картинок для container-fluid.
Point 111
22
Ребят, а вот такой вопрос: если я владелец бота анонимного чата, в котором, например, имеются подписки, используя какую-нибудь ЮКассу (или тому подобное, в общем с налогами, в...
Eugene Неелов
8
а давно такие жирные буквы в админке?
Миша
4
Гнева и тупости пост. Как блять можно работать с маркетологами? Их в детстве всех родители случайно цепляли об дверные откосы? Поступила таска, на сайте "лишний счетчик Google...
Igor
4
а у тг (бот) апи вообще есть статусная страница, кстати?
e\\/gen
5
Вообще сейчас эти все провайдеры облаков оборзели. Если тебе нужно 4 ядра и 4 гб., хер где такую конфигурацию найдешь. Суют тебе сразу либо 8гб. либоа сразу 16 гб., они мне на...
Igor
4
Всем привет. А никто не в курсе у бота может быть заблокированна возможность принимать звезды? На одном боте вызываю sendInvoice с нужными параметрами все ок, на втором дела...
John Doe
2
Карта сайта