[英]How to connect to multiple db in a php file?
我正在使用DBAL和Doctrine在Symfony 3中建立與數據庫的連接。 我想做的是將所有查詢保存在PHP文件中,而不是在控制器中。
在控制器中,我可以使用以下命令:
$conn = $this->get('doctrine.dbal.database2_connection');
獲得連接,但是在簡單的PHP中我無法。
因此,我不使用EntityManager
對象不知道如何調用多個連接,因為我不使用Entity類。
如果使用PDO,則每個連接均被視為一個對象,並且可以同時具有任意數量的連接。 查看文檔
為了實現您想要掌握的以下內容:
您需要在文檔中檢查如何使用多個數據庫(我想這是許多連接的意思)。
另外,您需要了解如何創建自定義存儲庫。
您將需要使用DQL(原則查詢語言)來進行自己的查詢。
最后一點是,您需要習慣使用Symfony的依賴項注入。
隨時跳過您已經知道的所有內容。 我無法在這里詳細說明所有問題,因為您的問題很模糊。 因此,此答案將指導您如何找到解決方案,或者至少關注您的問題。
Symfony允許您連接多個數據庫。 您需要進行bt鍛煉以實現此目的。
第1步
將參數添加到parameters.yml
文件。 可以使用以下參數添加第二個數據庫連接:
Parameters:
# First database
database_host: 127.0.0.1
database_port: null
database_name: qmsfumgabd
database_user: qmsfumgabd
database_password: xxx9bxxMxx
# Second database
database2_host: 127.0.0.1
database2_port: null
database2_name: huscqxzwaw
database2_user: huscqxzwaw
database2_password: dxxxFXxxxB
第2步
下一步是在config.yml
獲取這些憑據:
doctrine:
# Configure the abstraction layer
dbal:
# Set the default connection to default
default_connection: default
connections:
default:
driver: pdo_mysql
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
charset: UTF8
database2:
driver: pdo_mysql
host: '%database2_host%'
port: '%database2_port%'
dbname: '%database2_name%'
user: '%database2_user%'
password: '%database2_password%'
charset: UTF8
步驟#3
最后,指定項目中每個捆綁包的映射:
# Configure the ORM
orm:
default_entity_manager: default
entity_managers:
# Register which bundle should use which connection
default:
connection: default
mappings:
AppBundle: ~
DemoBundle: ~
database2:
connection: database2
mappings:
CloudwaysBundle: ~
第四步
現在,要調用任何實體管理器,只需使用連接名稱即可:
class UserController extends Controller
{
public function indexAction()
{
// All 3 return the "default" entity manager
$em = $this->getDoctrine()->getManager();
$em = $this->getDoctrine()->getManager('default');
$em = $this->get('doctrine.orm.default_entity_manager');
// Both of these return the "database2" entity manager
$anotherEm = $this->getDoctrine()->getManager('database2');
$anotherEm = $this->get('doctrine.orm.database2_entity_manager');
}
}
您也可以從symfony的文檔中獲取有關多個數據庫的幫助 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.