Нам нужно иметь имя префикса таблицы для нашего приложения. Мне жаль, что нам это не понадобится, но пользователи - пользователи. В настоящее время у нас есть этот TablePrefix АбонентуSymfony Doctrine (Migration) с префиксом
class TablePrefixSubscriber implements \Doctrine\Common\EventSubscriber {
protected $prefix = '';
public function __construct($prefix = '') {
$this->prefix = (string) $prefix;
}
public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) {
$classMetadata = $eventArgs->getClassMetadata();
if(strlen($this->prefix)) {
if(0 !== strpos($classMetadata->getTableName(), $this->prefix)) {
$classMetadata->setTableName($this->prefix . $classMetadata->getTableName());
}
}
foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) {
if ($mapping['type'] == \Doctrine\ORM\Mapping\ClassMetadataInfo::MANY_TO_MANY) {
if(!isset($classMetadata->associationMappings[$fieldName]['joinTable'])) { continue; }
$mappedTableName = $classMetadata->associationMappings[$fieldName]['joinTable']['name'];
if(0 !== strpos($mappedTableName, $this->prefix)) {
$classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName;
}
}
}
}
public function getSubscribedEvents() {
return array('loadClassMetadata');
}
конфигурации Услуга:
services:
app.event.doctrine.table_prefix_subscriber:
class: RYZ\Bundle\CoreBundle\EventListener\TablePrefixSubscriber
arguments: ['%database_prefix%']
tags:
- { name: doctrine.event_subscriber }
Это работает просто отлично, если у вас нет миграции или не писать запросы вручную (с помощью конструктора запросов).
Я понятия не имею, как добавить префикс к запросу в миграции доктрины.
Было бы хорошо, если бы я мог получить доступ к переменной конфигурации префикса database_prefix
в процессе миграции и просто добавить ее к каждому запросу.
Также я хочу получить доступ к переменной в классах репозитория Entity.
Я был бы счастлив, если бы кто-нибудь мог указать мне в правильном направлении.
Обновление: Я слышал о стратегии именования доктрин, но я думаю, что это не поможет мне здесь? (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/namingstrategy.html)