Php Phalcon db连接到同一主机上的多个数据库
我最近开始使用Phalcon PHP框架,有一件事让我很困惑 如何将$di设置为在同一主机上使用多个数据库?例如,如何使此查询工作Php Phalcon db连接到同一主机上的多个数据库,php,mysql,database-connection,phalcon,Php,Mysql,Database Connection,Phalcon,我最近开始使用Phalcon PHP框架,有一件事让我很困惑 如何将$di设置为在同一主机上使用多个数据库?例如,如何使此查询工作 SELECT * FROM DB1.TABLENAME_1 AS t1 LEFT OUTER JOIN DB2.TABLENAME_2 AS t2 ON t1.some_id = t2.other_id 我已经注册了到DB1的连接,并且加载了所有模型,可以轻松地访问任何模型中的数据,但是当我试图将一个db中的表与第二个db中的表连接起来时,我得到了一个错误:无法加
SELECT * FROM
DB1.TABLENAME_1 AS t1
LEFT OUTER JOIN DB2.TABLENAME_2 AS t2 ON t1.some_id = t2.other_id
我已经注册了到DB1的连接,并且加载了所有模型,可以轻松地访问任何模型中的数据,但是当我试图将一个db中的表与第二个db中的表连接起来时,我得到了一个错误:无法加载属于DB2的模型“TABLENAME_2”
这是我的$di
您可以在模型中添加三行代码,例如,我有两个DB DB1,DB2,DB1是主DB,此配置在service.php中设置: service.php: DB2是您想要使用的辅助数据库,它涉及两个表T1、T2。对于它的任何表,您都可以通过Phalcon devTools生成model.php T1.php、T2.php。因此,要使用此表中的代码,您应该添加三行代码,然后定义T1.php类: T1.php这是您的模型:
连接的用户对这两个数据库都有读取权限吗?是的,我还创建了一个模型TABLENAME_2,Phalcon正在尝试将此模型映射为DB1而不是DB22。只需在DI中添加两个db连接,然后在您的模型中设置连接服务:我已经尝试过了,确实有效,但还有第二个问题,当我使用这种方法时,我可以通过Phalcon开发工具添加模型
$di->setShared('db', function () use ($config) {
return new DbAdapter(array(
'host' => $config->database->host,
'username' => $config->database->username,
'password' => $config->database->password,
'dbname' => $config->database->dbname,
'options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"
)
));
});
$di->set('db', function () use ($config) {
return new DbAdapter(array(
'host' => "localhost",
'username' => "root",
'password' => $config->database->password,
'dbname' => "DB1",
'charset' => "utf8"
));
});
//declare DB2 as well as:
$di->set('DB2', function () use ($config) {
return new DbAdapter(array(
'host' => "localhost",
'username' => "root",
'password' => $config->database->password,
'dbname' => "DB1",
'charset' => "utf8"
));
});
class Events extends \Phalcon\Mvc\Model
{
//you can connect to DB2 database
public function initialize()
{
$this->setConnectionService('DB2');
}
...