アプリケーションのテーブル接頭辞名が必要です。私はそれが必要ではないと思っていますが、ユーザーはユーザーです。あなたは何の移行を持っていないか(クエリビルダを使用して)手動でクエリーを書いていない場合、これはうまく動作します接頭辞付きSymfony Doctrine(マイグレーション)
services:
app.event.doctrine.table_prefix_subscriber:
class: RYZ\Bundle\CoreBundle\EventListener\TablePrefixSubscriber
arguments: ['%database_prefix%']
tags:
- { name: doctrine.event_subscriber }
:私たちはこのTablePrefix加入
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');
}
サービスの構成を有している瞬間に 。
doctrineの移行でクエリにプレフィックスを追加する方法はわかりません。
移行でプレフィックス設定変数database_prefix
にアクセスしてすべてのクエリに追加するだけで問題ありません。
また、Entityリポジトリクラスの変数にアクセスします。
誰かが私を正しい方向に向けることができれば嬉しいです。
更新:私はDoctrine Naming Strategyについて聞いたことがありますが、私がここで助けにならないと思いますか?あなたのマイグレーションクラスにContainerAwareInterface
を実装し、ちょうどあなたが実装されているすべてのパラメータおよびサービスにアクセスすることができますContainerAwareInterface
: キーワード:(http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/namingstrategy.html)