来自非默认连接的原始 SQL 查询

Raw SQL Query from Non Default Connection

我需要在非默认连接上 运行 原始 SQL 查询。

我在文档中看到的使用备用连接的唯一方法是注入 ManagerRegistry。这让我得到一个 ObjectManager 但我没有看到如何执行原始 sql.

EntityManagergetConnection 方法可以让我 运行 raw SQL,但我不知道如何为备用连接获取实体管理器与 DI.

根据使用多个连接的文档,这是我所在的位置:

public function Foo(ManagerRegistry $doctrine)
{
    $om = $doctrine->getManager('foo');
    // How do I use $om to create a raw SQL query
}

作为参考,这里是 symfonycasts 显示如何使用 EntityManager 执行此操作,但我不确定如何 select foo 连接,因为注入会给我默认连接。

$conn = $entityManager->getConnection();
$stmt = $conn->prepare($sql);
$res = $stmt->executeQuery();

这是我的做法。

首先您需要更新配置以在 config/package/doctrine.yaml 中设置不同的连接:

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                url: '%env(resolve:DATABASE_URL)%'
            alt:
                url: '%env(resolve:DATABASE_URL_ALT)%'

然后,在您的控制器或服务中,您可以注入 ManagerRegistry 并获得连接:

public function index(ManagerRegistry $managerRegistry)
{
    $connection = $managerRegistry->getConnection("alt");
    $result = $connection
        ->prepare("SELECT * FROM your_table_in_alt_db")
        ->executeQuery()
        ->fetchAllAssociative()
    ;
    dump($result);
}