我正在与多个实体经理一起工作,从这里遵循Symfony Doc,但是我想将两个实体经理用于一个DIR。它在Findall或FindOneby查询中无法正常工作,它显示了"默认"实体管理器的结果。
在config/packages/doctrine.yaml中:
dbal:
# configure these for your database server
default_connection: default
connections:
default:
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
url: '%env(DATABASE_URL)%'
blog:
driver: 'pdo_mysql'
server_version: '5.7'
url: '%env(DATABASE_BLOG_URL)%'
charset: utf8mb4
orm:
auto_generate_proxy_classes: true
default_entity_manager: default
entity_managers:
default:
connection: default
naming_strategy: doctrine.orm.naming_strategy.underscore
mappings:
Main:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'AppEntity'
alias: Main
blog:
connection: blog
naming_strategy: doctrine.orm.naming_strategy.underscore
mappings:
blog:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'AppEntity'
alias: blog
在控制器中:
$entityManager = $this->getDoctrine()->getManager('blog');
$University = $entityManager->getRepository(University::class)
->findOneBy(array('Code' => $Code));
我建议将连接注入您的控制器中的服务,并利用Autovering
//控制器
public function testController(YourService $service){
return $service->test();
}
//services.yml
AppServiceYourService:
public: true
arguments: ['@doctrine.orm.entity_manager','@doctrine.orm.blog']
//src/service/yourservice.php
class YourService {
private $blog,$em;
public function __construct(EntityManager $em, EntityManager $blog) {
$this->em = $em
$this->blog = $blog;
}
public function test()
{
//connect to blog
$this->blog->getRepository(your_entity::class)->findAll();
//connect to default
$this->em->getRepository(your_entity::class)->findAll();
}
您是否试图将第二个db的名称放在函数的第二个参数中,例如:
$University = $entityManager->getRepository(University::class, 'blog')
->findOneBy(array('Code' => $Code));
更新2:
仅使用此配置,而无需指定DIR,但是通过使用此配置,您将使用vanilla sql与您的db相互插入:博客: 连接:博客 naming_strategy:doctrine.orm.naming_strategy.underscore
我的最后建议是为每个连接创建不同的文件夹实体,并在其中复制SAMES实体,并且您可以正确使用ORM学说。