查询第二个数据库连接时出现“找不到表”错误

问题描述 投票:0回答:1

我正在使用 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;
}

环境:

  • 交响乐:7.1.3
  • 学说 DBAL:4.1.0
  • 学说 ORM:3.2.2

我尝试过的:

  • 我可以成功查询
    npreports
    ,没有任何问题。
  • 将默认连接更改为
    npfactory
    可以,但这并不理想,因为我需要两个连接。
  • 我已确认表
    scheduled_tasks
    存在于
    npfactory
    数据库中。

Symfony 管理数据库连接的方式是否有问题,或者我是否缺少 Doctrine 配置的某些内容?如何确保每个查询使用正确的连接?

enter image description here

php mysql symfony doctrine
1个回答
0
投票

我能够通过使用

services.yaml
中的别名显式注入正确的数据库连接来解决该问题。我是这样做的:

services:
    App\Repository\FactoryRepository:
        arguments:
            $npfactory: '@doctrine.dbal.npfactory_connection'

虽然这解决了问题,但我对这种方法并不完全满意。必须在服务容器中显式定义连接感觉很麻烦,尤其是在多个连接的灵活性应该更加无缝的情况下。

© www.soinside.com 2019 - 2024. All rights reserved.