Возможно ли перегрузить поле Enum с помощью DataExtension?
class Order extends DataObject { private static $db=array('Status'=>"Enum('Unpaid, Paid','Unpaid')"; } class OrderExtension extends DataExtension { private static $db=array('Status'=>"Enum('Unpaid, Paid, Cancelled','Unpaid')"; //doesn't work }
Я не мог понять, как получить метод augmentDatabase (), но после разговора с коллегой он предложил использовать config.yml, и это сделало трюк.
Order: db: Status: Enum('Unpaid, Paid, Cancelled','Unpaid')
Это представляется невозможным с использованием методов, которые мы обсуждали до сих пор. Я реализовал код OP и нашел то же самое, что таблица украшенного объекта («Заказ» в этом случае) не была обновлена, как ожидалось.
Я могу объяснить причину, почему это не реализовано с помощью DataExtension
учитывая, что разработчики могут использовать некоторую основную логику, которая опирается на конкретные спецификации таблиц и столбцов.
Я немного поработал и обнаружил, что то, что хочет OP, возможно, но с небольшим количеством кода. Посмотрев следующую страницу: https://docs.silverstripe.org/en/3.3/reference/dataextension/#custom-database-generation, она предлагает определить метод augmentDatabase()
для пользовательского DataExtension
.
Однако, похоже, нет подробных документов о том, что делать дальше. Вместо этого вышеприведенная страница советует проверить основное расширение Versioned
которое после grepping моего всего проекта SS является единственным подклассом DataExtension
который мог найти, объявив метод augmentDatabase()
. Учитывая, что Versioned
должен иметь дело с таблицами x3 для каждого класса, который он украшает ( SiteTree
, SiteTree_Live
, SiteTree_versions
), тогда его логика обязательно будет задействована. Однако я подозреваю, что для пользовательской реализации в DataObject все может быть немного проще. (Если вы не управляете версиями DataObjects!).
Удачи 🙂