Symfony - полиморфная связь oneToOne по идентификатору
Есть клас Product и у него есть склад (WarehouseLocation), и в его "позиций" ProductAttitude может быть склад, так вот, привязка позиции и продукта к складу будет на одну таблицу по идентификатору сущностей, то-есть id=id
Product:
/**
* @ORM\OneToOne(targetEntity="WarehouseLocation") //пример
* @ORM\JoinColumn(name="id", referencedColumnName="id")
*/
private ?WarehouseLocation $warehouse;
Связи на уровни базы не будет только на уровни кода. Как можно замапить сущность WarehouseLocation в атрибуты классов как примеры выше. Мне ненужно работать с сущностями по отдельно, хочу через главную, можно ли такое реализовать в symfony, по тому что в других фреймах такое реализуемо.
Ответы (1 шт):
Решил задачку! В подчинённой сущности вписываете поле на которое будет ссылаться главная сущность:
// Подченьоный сушность в которой id=id Product
/**
* @var Product
*
* @ORM\OneToOne(targetEntity="Product",
* inversedBy="warehouse", // поле куда будет маписта даный обект в продукт
* orphanRemoval=true,
* cascade={"persist", "remove"}
* )
* @ORM\JoinColumn(name="id", referencedColumnName="id", onDelete="CASCADE")
*/
private ?Product $product; // null обизательний так как даная сушнности будет пустой если к ней будет обращатса другая главная сушность
В главной сущности обяляем поле подчернённой сущности с возможностью записать null или нет в зависимости как вам нужно:
Главная сушность Product
/**
* @ORM\OneToOne(
* targetEntity="WarehouseLocation",
* mappedBy="product",
* orphanRemoval=true,
* cascade={"persist", "remove"}
* )
*/
private ?WarehouseLocation $warehouse;
Дальше заключения, делаем diff миграции и со всего прочего удаляем генерируемую связь где FK равняется id=id, поднимаем миграцию, и теперь добавляем таблицу подчернённую сущность в doctrine.dbal.connections.default.schema_filter или туда где у вас производятся настройки фильтра схемы, данный мув был сделан чтобы не было выхлопов в миграцию по связи, а сама связь теперь работает и мы можем флушыть подчиненный объект с главного, не зависимости кому он подчиняется