MY_Model - 动态更改表格?

时间:2014-03-06 14:31:29

标签: php mysql codeigniter model codeigniter-2

使用https://github.com/jamierumbelow/codeigniter-base-model,如何动态模拟模型中使用的表名?

我有一些非常相似的模型,一组由A组用户使用,另一组由B组用户使用。

为了节省一些编码并使事情变得更整洁,我想整合模型,因此需要传递组,并根据传递的组更改表格。

我知道我可以在模型类的开头下面设置表名,但是我想知道如何在调用模型方法时动态设置它?

以下是我的一些测试代码:

function setGroup($group)
{
    switch($group) {
        case 'admin':
        case 'mod':
            $this->table = 'library_categories';
            break;
        case 'members':
            $this->table = 'user_categories';
            break;
    }

    return $this;
}

这不起作用。

如果我在A组的表后面命名模型,例如group_a_model.php,然后甚至为B组设置表($ this-> table =' group_b')并没有实际更改查询表。

我尝试给模型一个通用名称(group_model)但是我必须设置" public $ table =' group_a')"在模型中。同样,提供的代码实际上不会改变使用的表,它总是使用表group_a ...

有没有办法改变使用的表,使用这个MY_Model助手?

1 个答案:

答案 0 :(得分:1)

该图书馆中没有$this->table 有一个$this->_table,库使用它来识别表..但不幸的是,该属性受到保护,因此您无法从类外部更改它的值。

将以下方法添加到类中:

 public function setTable($table)
 {
    $this->_table = $table;
 }

意味着您现在可以使用$this->setTable('a_db_table');

设置表名

您可以通过直接编辑类文件来添加该方法。或者通过使用您自己的类继承该类...例如:

class custom_model extends MY_Model{
   //put the method I mentioned earlier here
}