来自非默认连接的原始 SQL 查询
Raw SQL Query from Non Default Connection
我需要在非默认连接上 运行 原始 SQL 查询。
我在文档中看到的使用备用连接的唯一方法是注入 ManagerRegistry
。这让我得到一个 ObjectManager
但我没有看到如何执行原始 sql.
EntityManager
有 getConnection
方法可以让我 运行 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);
}
我需要在非默认连接上 运行 原始 SQL 查询。
我在文档中看到的使用备用连接的唯一方法是注入 ManagerRegistry
。这让我得到一个 ObjectManager
但我没有看到如何执行原始 sql.
EntityManager
有 getConnection
方法可以让我 运行 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);
}