我需要在非默认连接上运行原始 SQL 查询。
我在文档中看到的使用备用连接的唯一方法是注入ManagerRegistry. 这让我得到了一个ObjectManager,但我不知道如何执行原始sql。
EntityManager有getConnection让我运行原始 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)
我是这样做的。
首先,您需要更新配置以设置不同的连接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)
| 归档时间: |
|
| 查看次数: |
2672 次 |
| 最近记录: |