Часто задают такие вопросы - "Что делать, если надо не просто добавить поле в существующую модель, а, например, добавить новый индекс?" Или "Как убить существующий индекс?".
Да, простым декорирование класса это не сделать - через него можно добавить поле или связь с другой моделью и только. Но и тем не менее способ есть.
Это можно сделать, задекорировав класс XLite\Core\Database, метод loadClassMetadata.
Это метод-перехватчик события loadClassMetadata от Doctrine и срабатывает он при загрузке метаданных модели. Соответственно, на эти метаданные можно повлиять - добавить, поменять или стереть что угодно - поле, индекс, связь с другой моделью.
Подробнее о событии можно прочитать здесь (там в качестве примера добавляют поле).
Код самого класса-хранилища метаданных здесь.
Комментариев нет:
Отправить комментарий