У меня есть много объектов, простирающихся от одного родительского объекта.
Я хочу удалить один или несколько столбцов только из одного из них, сохраняя наследование.
Я попытался найти решение, сопоставляя родительский объект как MappedSuperClass
но это не помогает.
Пример :
<?php /** @ORM\Entity */ class Base { /** @ORMColumn(name="foo", type="string") */ protected $foo; /** @ORMColumn(name="bar", type="string") */ protected $bar } /** * @ORM\Entity */ class Child extends Base { // How take only the Base::$bar column mapping // and not the Base::$foo column mapping }
Вся глава сопоставления наследования документации доктрины не дает мне альтернативы.
Мне нужно действительно удалить / исключить столбцы из базы данных, сериализация не решает мою проблему.
Есть ли способ достичь этого?
Вы не можете выборочно наследовать части класса сущности. Похоже, вам нужно реорганизовать ваш базовый класс или, возможно, ввести другой абстрактный класс, в зависимости от того, какие свойства ваши другие классы разделяют между собой.
т.е.
/** * @MappedSuperclass */ class Base { /** @ORMColumn(name="foo", type="string") */ private $foo; } /** * @MappedSuperclass */ class SomeOtherBase extends Base { /** @ORMColumn(name="bar", type="string") */ private $bar } /** * @ORM\Entity */ class Child extends Base { // How take only the Base::$bar column mapping // and not the Base::$foo column mapping }
PHP не позволяет удалять возможности класса через наследование, он сделан и мыслится обратным образом.
см. http://php.net/manual/en/language.oop5.inheritance.php
Вы можете использовать черты и наследование рефакторинга:
<?php trait BaseFooTrait { /** @ORM\Column(name="foo", type="string") */ protected $foo; // ... getter and setter } /** * @ORM\Entity */ class Base { /** @ORM\Column(name="bar", type="string") */ protected $bar; // ... getter and setter } /** * @ORM\Entity */ class FooBase extends Base { use BaseFooTrait; }
=> Расширение Base
вас нет foo
.