我正在使用带有Doctrine的DBAL在Symfony 3中建立到数据库的连接。我想做的是将所有查询都放在PHP文件中,而不是放在控制器中。
在控制器中我可以使用它:
$conn = $this->get('doctrine.dbal.database2_connection');
获取连接,但在简单的PHP中我不能。
所以,我不知道如何在不使用EntityManager
对象的情况下调用多个连接,因为我没有使用Entity类。
答案 0 :(得分:0)
如果使用PDO,则每个连接都被视为一个对象,您可以同时拥有任意数量的连接。 Check out the docs
答案 1 :(得分:0)
为了达到你想要掌握的东西所需要的东西:
您需要检查如何使用多个数据库(我猜这是多少个连接的含义)in the documentation。
此外,您还需要了解如何create custom repositories.
您需要使用DQL (doctrine query language)进行自己的查询。
最后一点是你需要使用Symfony's dependency injection.
随意跳过您已经知道的一切。我不能在这里详述一切,因为你的问题很模糊。因此,这个答案将指导如何找到您的解决方案或至少集中您的问题。
答案 2 :(得分:0)
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: ~
步骤#4
现在只需调用任何实体管理器使用连接名称:
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');
}
}
您也可以从multiple databases的symfony文档中获取帮助。