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

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

5 ответов

16 просмотров

Вроде сюда подходит 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.

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта