在我正在处理的当前项目中,数据分布在两个数据库中。我们尝试使用的方法是为第二个数据库使用别名,然后扩展数据库类以使用实际数据库名称替换别名。
在/classes/database/mysql.php中,我们添加了这个:
class Database_MySQL extends Kohana_Database_MySQL {
public static $alias;
public static $sprtDbName;
public function __construct($name, $config) {
$con = $config['connection'];
self::$sprtDbName = "$con[database]_support";
parent::__construct($name, $config);
}
public function query($type, $sql, $as_object = FALSE, array $params = NULL) {
$sql = str_ireplace('SUPPORT_ALIAS', self::$sprtDbName, $sql);
return parent::query($type, $sql, $as_object, $params);
}
}
在/config/database.php中,我们有:
$db_config = array(
'dev_local' => array(
'type' => 'mysql',
'connection' => array(
'hostname' => 'localhost',
'username' => 'username',
'password' => 'password',
'database' => 'db_name'
),
'table_prefix' => '',
'charset' => 'utf8',
'caching' => FALSE,
'profiling' => TRUE,
),
'support' => array(
'type' => 'mysql',
'connection' => array(
'hostname' => 'localhost',
'username' => 'username',
'password' => 'password',
'database' => 'SUPPORT_ALIAS'
),
'table_prefix' => '',
'charset' => 'utf8',
'caching' => FALSE,
'profiling' => TRUE,
),
);
问题出在这里:在我的一个ORM课程中,当我这样开课时,它运行正常:
class Model_Something extends ORM {
protected $_table_name = 'SUPPORT_ALIAS.something';
public $doc_id = null;
public $document_compiled = null;
但是当我使用这种方法时:
class Model_Something extends ORM {
protected $_table_name = 'something';
public $doc_id = null;
public $document_compiled = null;
protected $_db = 'support';
我收到此错误:
Database_Exception [ 1044 ]: Access denied for user 'username'@'localhost' to database 'SUPPORT_ALIAS'
别名永远不会被替换。我错过了什么?
答案 0 :(得分:3)
我本身无法回答你的问题,但我会使用Kohana内置支持非标准数据库:
http://kohanaframework.org/3.2/guide/orm/models#use-a-non-default-database
所以,而不是:
protected $_db = 'support';
使用:
protected $_db_group = 'support';
因此,不需要class Database_MySQL extends Kohana_Database_MySQL
希望这有帮助。