Phalcon数据库连接到同一主机上的多个数据库

时间:2014-09-04 13:25:59

标签: php mysql database-connection phalcon

我最近开始使用Phalcon PHP Framework,有一件事让我很困惑。

如何设置$di在同一主机上使用多个数据库?例如,如何使此查询工作

SELECT * FROM
DB1.TABLENAME_1 AS t1
LEFT OUTER JOIN DB2.TABLENAME_2 AS t2 ON t1.some_id = t2.other_id

我已经注册了与DB1的连接,并且我已经加载了所有模型,并且可以轻松访问任何模型中的数据,但是当我尝试使用表从一个数据库中JOIN表时从第二个数据库我得到错误模型' TABLENAME_2'无法加载属于DB2的文件

这是我的$di

$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'"
        )
    ));
});

1 个答案:

答案 0 :(得分:3)

您可以在模型中添加三个代码行,例如我有两个DB(DB1,DB2),DB1是主数据库,此配置在service.php中设置:

service.php:

$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"
    ));
});

DB2是您要使用的辅助数据库,它涉及两个表(T1,T2)。对于它的任何表,你可以通过Phalcon devTools生成一个model.php(T1.php,T2.php)。因此,要从这些表中使用,您应该添加三个代码行,然后定义T1.php类:

T1.php(这是你的模特):

class Events extends \Phalcon\Mvc\Model
{

//you can connect to DB2 database
public function initialize()
{
    $this->setConnectionService('DB2');
} 
...