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

Cod*_*er1 2 doctrine symfony

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

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

EntityManagergetConnection让我运行原始 SQL 的方法,但我不知道如何获取实体管理器以与 DI 进行备用连接。

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

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

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

$conn = $entityManager->getConnection();
$stmt = $conn->prepare($sql);
$res = $stmt->executeQuery();
Run Code Online (Sandbox Code Playgroud)

Adr*_*TTE 6

我是这样做的。

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

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                url: '%env(resolve:DATABASE_URL)%'
            alt:
                url: '%env(resolve:DATABASE_URL_ALT)%'
Run Code Online (Sandbox Code Playgroud)

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

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