在config / database.php中为表添加前缀,但有一些例外

时间:2014-08-24 13:28:00

标签: php mysql database codeigniter codeigniter-2

我决定将两个相关wbsits A,B的表合并到一个数据库中,这样他们就可以共享一些表

我已经为网站B_的表添加了前缀B,所以我可以将它们与表A区别开来,避免名称相似的表之间发生冲突

所以我现在有两个选择:

1 - 更改网站B的源代码中的每个表名称,并为其添加B_前缀...这将花费很长时间

2 - 在config / database.php中使用前缀选项...我将使用

但问题在于:

有两个网站共享的3个表,它们没有任何前缀

1 - users
2 - tractions 
3 - sessions 

所以我想做的就是在这3张表的前缀中进行exepction

基本上在我希望拥有的网站B的config / database.php中

$db['default'] = array(
    'dbprefix' => 'B_',
);

但有些我想为3个表制作例如:

$exception = array('users' , 'tractions' , 'sessions' );

if(in_array($table_name , $exception )
$db['default']['dbprefix'] = '';

这是可疑的,但我不知道在哪里以及如何

2 个答案:

答案 0 :(得分:0)

更好的方法是为前缀为B_的所有3个表创建视图,这样您就不需要在代码中出现任何异常。

插入查询也可以正常运行,因为您只能通过视图更新一个表。

示例:

 CREATE VIEW B_users as SELECT * FROM users;

现在,在CodeIgniter中,可以通过视图访问users表,并且可以正常工作。

答案 1 :(得分:0)

在查询使用$this->db->dbprefix之前,它非常简单,它可以被覆盖

$ this-> db-> dbprefix =''; 我已经习惯了它对我来说很好用

示例

public function table_update($data,$id)
{

$this->db->dbprefix = ''; 
$this->db->update('users', $data, array('id' => $id));

return $this->db->affected_rows();

}

你可以检查一下吗

https://ellislab.com/codeigniter/user-guide/database/queries.html

注意:在你的构造函数中也调用你的dbprefix,在那个时候不需要在dbprefix之前调用任何查询。确定你使用有任何前缀表的模型不要像这样跟着

公共职能__construct()     {

    parent::__construct();
    $this->db->dbprefix = ''; 

}