我正在使用 Symfony 7.1.3 和 Doctrine DBAL 4.1,并在我的
doctrine.yaml
中配置了多个数据库连接。我的默认连接 (npreports
) 工作正常,但是当我尝试在第二个连接 (npfactory
) 上运行查询时,遇到以下错误:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'npreports.scheduled_tasks' doesn't exist
该错误似乎表明它仍在尝试使用默认连接 (
npreports
),即使查询是针对 npfactory
。
这是我在
doctrine.yaml
中的数据库配置:
doctrine:
dbal:
default_connection: npreports
connections:
npreports:
url: '%env(resolve:DATABASE_REPORTS_URL)%'
npfactory:
url: '%env(resolve:DATABASE_FACTORY_URL)%'
我将
npfactory
连接注入到我的存储库和控制器中,如下所示:
public function __construct(Connection $npfactory)
{
$this->npfactory = $npfactory;
}
环境:
我尝试过的:
npreports
,没有任何问题。npfactory
可以,但这并不理想,因为我需要两个连接。scheduled_tasks
存在于 npfactory
数据库中。Symfony 管理数据库连接的方式是否有问题,或者我是否缺少 Doctrine 配置的某些内容?如何确保每个查询使用正确的连接?
我能够通过使用
services.yaml
中的别名显式注入正确的数据库连接来解决该问题。我是这样做的:
services:
App\Repository\FactoryRepository:
arguments:
$npfactory: '@doctrine.dbal.npfactory_connection'
虽然这解决了问题,但我对这种方法并不完全满意。必须在服务容器中显式定义连接感觉很麻烦,尤其是在多个连接的灵活性应该更加无缝的情况下。