symfony - Symfony 使用多个实体
问题描述
我用 Doctrine 为一家公司写了一个 Symfony 5.0 应用程序。应用程序需要管理两个相同的数据库,这些数据库不能折叠在一个数据库中。正如我编辑的官方文档中所建议的那样:教义.yaml
doctrine:
dbal:
default_connection: default
connections:
default:
url: '%env(resolve:DATABASE_URL_FAU)%'
driver: 'pdo_mysql'
server_version: '8.0'
cef:
url: '%env(resolve:DATABASE_URL_CEF)%'
driver: 'pdo_mysql'
server_version: '8.0'
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: Fau
cef:
connection: cef
mappings:
Cef:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: Cef
然后编辑我的所有控制器的功能,以这种方式设置实体管理器和存储库:
$em = $this->getDoctrine()->getManager($this->security->getUser()->getEnte());
$gruppiRepository = $em->getRepository(Gruppi::class, $this->security->getUser()->getEnte());
getRepository 和 getManager 的第二个参数正确返回辅助实体管理器连接的名称(“cef”)。但我总是从“默认”中得到结果。
这是实体 Manager 的 dd($em):
GruppiController.php on line 95:
Doctrine\ORM\EntityManager {#714 ▼
-config: Doctrine\ORM\Configuration {#596 ▶}
-conn: Doctrine\DBAL\Connection {#712 ▼
#_conn: null
#_config: Doctrine\DBAL\Configuration {#703 ▶}
#_eventManager: Symfony\Bridge\Doctrine\ContainerAwareEventManager {#707 ▶}
#_expr: Doctrine\DBAL\Query\Expression\ExpressionBuilder {#713 ▶}
-isConnected: false
-autoCommit: true
-transactionNestingLevel: 0
-transactionIsolationLevel: null
-nestTransactionsWithSavepoints: false
-params: array:11 [▼
"url" => "mysql://root:1234@127.0.0.1:3306/fgc_cef"
"driver" => "pdo_mysql"
"host" => "127.0.0.1"
"port" => "3306"
"user" => "root"
"password" => "1234"
"driverOptions" => []
"serverVersion" => "8.0"
"defaultTableOptions" => array:1 [▶]
"dbname" => "fgc_cef"
"charset" => "utf8mb4"
]
-platform: null
#_schemaManager: null
#_driver: Doctrine\DBAL\Driver\PDOMySql\Driver {#709}
-isRollbackOnly: false
#defaultFetchMode: 2
}
-metadataFactory: Doctrine\ORM\Mapping\ClassMetadataFactory {#715 ▶}
-unitOfWork: Doctrine\ORM\UnitOfWork {#716 ▶}
-eventManager: Symfony\Bridge\Doctrine\ContainerAwareEventManager {#707 ▶}
-proxyFactory: Doctrine\ORM\Proxy\ProxyFactory {#722 ▶}
-repositoryFactory: Doctrine\Bundle\DoctrineBundle\Repository\ContainerRepositoryFactory {#590 ▶}
-expressionBuilder: null
-closed: false
-filterCollection: null
-cache: null
}
所以,数据库连接是正确的......但我仍然从“默认”获得结果。$gruppiRepository 也一样。
我不想编辑我的实体文件夹结构,将相同的实体文件放在两个单独的目录中。
我该怎么办?
此致,
GV
[编辑] 我这样解决了:在每个存储库中创建一个新函数
public function setEntityManager(EntityManagerInterface $entityManager): self
{
$this->_em = $entityManager;
return $this;
}
然后更改每个存储库调用(例如,如果您想执行 findAll():
$em = $this->getDoctrine()->getManager($this->security->getUser()->getEnte());
$gruppi = $em->getRepository(Gruppi::class)->setEntityManager($em)->findAll();
解决方案
推荐阅读
- django - Django settings.AUTH_USER_MODEL 在单独的模块中定义
- codenameone - 包含 CODENAME SOCKETS LIBRARY 时生成错误
- c# - 我可以复制 .OFT 文件并更改其主题吗
- java - java - 如何在java中将结果从数组传递给另一个没有0数字的方法?
- java - Eclipse 下缺少“并非所有期望都得到满足”
- apache - 使用 Apache 的奇异路径安装 openCPU
- svn - pip install -e svn+ssh 不带用户
- node.js - 创建事件时的资源(房间)响应状态 Microsoft Graph 日历
- json - Golang 将 JSON 解码为一个字符串和一个 float64 的切片
- windows - 如何从服务器加载所有 Windows 符号,从 W10 版本 1803 / build 17134 开始?