Перегрузка переполнения в SilverStripe DataExtension

Возможно ли перегрузить поле 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!).

Удачи 🙂