Intereting Posts
Уязвимость $ _SERVER не работает? Как заменить элемент html на ajax-ответ? Возвращение многомерного массива PHP в Javascript / AJAX Подавать файл пользователю через http через php Как экспортировать исходный контент в div в файл text / html Как проверить, сколько раз что-то происходит в строке в PHP Могу ли я получить братьев и сестер с помощью DOMDocument от PHP? Предупреждение: mysqli_stmt_bind_param () ожидает, что параметр 1 будет mysqli_stmt, boolean задан в Как использовать AJAX в качестве альтернативы iframe? Хранить другое значение в базе данных из форм, созданных динамически с помощью PHP? SyntaxError: JSON.parse: неожиданный символ в строке 1 столбца 2 данных JSON – FireBug сообщает об этой ошибке. Любое решение? Как перенаправить администратора после добавления администратора? Получить данные на основе входа пользователя в рюкзак laravel Является ли это эффективным кодированием антиспама? Как поместить проверку ошибок для simplexml_load_file?

Селективно наследует части объекта

У меня есть много объектов, простирающихся от одного родительского объекта.

Я хочу удалить один или несколько столбцов только из одного из них, сохраняя наследование.
Я попытался найти решение, сопоставляя родительский объект как 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 .