2 番目の dbal 接続を使用してフォーム フィールドの選択肢を提供する方法
実際には、これをもう少し簡単に、より少ないコードで行うことができます...
構成
すでに 2 番目の接続をセットアップしている場合、構成は次のようになりますdoctrine.dbal.mycnx_connection
。
app/config/config.yml
doctrine:
dbal:
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
mycnx_connection: # credentials for 2nd connection
driver: "pdo_mysql"
host: "%database_host_2%"
port: "%database_port_2%"
dbname: "%database_name_2%"
user: "%database_user_2%"
password: "%database_password_2%"
charset: UTF8
default_connection: default
この接続を使用する2 番目のエンティティ/ドキュメント マネージャーをまだ構成していない場合:
app/config/config.yml
doctrine:
# dbal, ...
orm:
entity_managers:
default:
connection: default
mappings:
AcmeDemoBundle: ~
AcmeStoreBundle: ~
company: # <- setup a second em using the customer connection
connection: customer
mappings:
AcmeCompanyBundle: ~
default_entity_manager: default
... これは、この時点では非常に似ているように見えるかもしれませんが、実際にはそうではありません ... 2 番目の dbal 接続がある場合、上記のすべてがアプリケーションに既に存在しているはずです。
私はそれを他の人にとって本当に明白にしたかっただけです。
これで、2 つのエンティティ マネージャーを反映する 2 つのサービスを利用できるようになりました。
@doctrine.orm.entity_manager.default
( ... にエイリアスされています@doctrine.orm.entity_manager
)
@doctrine.orm.entity_manager.company
エンティティ フィールド タイプ
あとは、エンティティ フィールド タイプcompany
を使用し、接続を使用してエンティティ マネージャーを使用するように構成するだけです。
Acme/YourBundle/Form/Type/YourType.php
use Doctrine\ORM\EntityRepository;
// ...
$builder->add('users', 'entity', array(
'class' => 'AcmeCompanyBundle:Company',
'em' => 'doctrine.orm.entity_manager.company', // <- non-default em here
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('company')
->orderBy('company.name', 'ASC');
},
));
それだけです...フォームをサービスにしたい場合もありますが...何も注入する必要はありません。
EntityRepository $er
の部分を使用する必要はありません'query_builder'
...会社のリポジトリを作成したくない場合は、QueryBuilder インスタンスを返すだけでかまいません。
ほんの数セント...幸せなコーディング!