То, когда я использую Доктрину для генерации классов от Yaml/db каждый Базовый класс (который включает определение таблицы), расширяет класс Doctrine_Record.
Так как мое приложение использует ведущее устройство и (несколько) ведомые серверы дб, я должен смочь заставить Базовые классы расширить мой пользовательский рекордный класс, чтобы вынудить записи перейти к основному серверу дб (как описано сюда). Однако, если я изменяю базовый класс вручную, я теряю его снова, когда я повторно создаю свои классы от Yaml/db использование Доктрины.
Я должен найти способ сказать Доктрине расширять мой собственный Базовый класс или находить другое решение основной/ведомой установки дб с помощью Доктрины.
Пример сгенерированная модель:
abstract class My_Base_User extends Doctrine_Record
{
Однако мне нужен он, чтобы быть автоматически сгенерированным как:
abstract class My_Base_User extends My_Record
{
Я использую Доктрину 1.2.1 в новой Платформе Зенда 1.9.6 приложений, если это имеет какое-либо значение.
Обычно, как только я задаю вопрос, мне удается найти ответ. Я записываю его здесь на тот случай, если у кого-то еще возникнет такая же проблема.
Вы можете передать параметр 'baseClassName' в методы generateModels *, и Doctrine будет использовать его как базовый класс записи.
Примеры:
Doctrine_Core::generateModelsFromDb('models', array('master'), array('generateTableClasses' => true, 'baseClassName' => 'My_Record'));
или с помощью Cli:
$options['generate_models_options'] = array(
'pearStyle' => true,
'baseClassPrefix' => 'My_',
'baseClassName' => 'My_Record',
'classPrefix' => '',
'classPrefixFiles' => false,
'generateTableClasses' => true,
);
$cli = new Doctrine_Cli($options);
Отлично, спасибо! Это круто, потому что я беру параметры доктрины из моего application.ini в моем проекте Zend Framework аналогичной версии (1.9.x). Теперь я могу просто изменить ini, добавив baseClassName следующим образом:
doctrine.generate_models_options.baseClassName = "BaseRecord"
Еще раз спасибо за то, что сэкономил мне время, чтобы разобраться в этом самостоятельно :)