Я использовал symfony 1.4
и Doctrine
для создания своего рода мини-CMS. Он использует базу данных для хранения различных страниц и категорий.
Теперь я добавил еще одно соединение к databases.yml
, чтобы получить информацию о клиенте.
Я хотел бы указать symfony
, что эта база данных только для чтения и что она никогда не должна писать в нее.
На данный момент я создал пользователя во 2-й базе данных, который может только читать, похоже, он делает свое дело, хотя команды, подобные doctrine:build --all
, все еще пытаются писать в нем.
РЕДАКТИРОВАТЬ: Благодаря ответу Паскаля я использую события, чтобы сказать доктрине использовать только один дБ для задачи sfDoctrineDropDbTask
.
public function setup()
{
(...)
$this->dispatcher->connect('command.filter_options', array($this, 'filterCommandOptions'));
}
public function filterCommandOptions(sfEvent $event, $options)
{
if ('sfDoctrineDropDbTask' === get_class($event->getSubject()))
$options = array('base1');
elseif ('sfDoctrineBuildDbTask' === get_class($event->getSubject()))
$options = array('base1');
elseif ('sfDoctrineDataDumpTask' === get_class($event->getSubject()))
$options = array('base1');
//elseif ('sfDoctrineInsertSqlTask' === get_class($event->getSubject()))
//$options = array('base1');
elseif ('sfDoctrineCreateModelTables' === get_class($event->getSubject()))
$options = array('base1');
return $options;
}
Этот трюк не работает для других задач:
doctrine:data-dump
все еще читает обе базы данных,
- доктрина все еще пытается написать во время
doctrine:build --all
задачи
sfDoctrineInsertSqlTask
жалуется, что я дал слишком много вариантов.