我最近开始使用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'"
)
));
});
答案 0 :(得分:3)
您可以在模型中添加三个代码行,例如我有两个DB(DB1,DB2),DB1是主数据库,此配置在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类:
class Events extends \Phalcon\Mvc\Model
{
//you can connect to DB2 database
public function initialize()
{
$this->setConnectionService('DB2');
}
...