MY_Model - 动态更改表?

Posted

技术标签:

【中文标题】MY_Model - 动态更改表?【英文标题】:MY_Model - dynamically change table? 【发布时间】:2014-04-09 06:19:48 【问题描述】:

使用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,那么即使为 Group B ($this->table = 'group_b') 设置表也不会真正更改查询的表。

我尝试为模型指定一个通用名称 (group_model),但随后我必须在模型中设置“public $table = 'group_a')”。同样,提供的代码实际上不会更改使用的表,它始终使用表 group_a...

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

【问题讨论】:

将 viriable 添加到 $this->table 示例 $table = $this->table = "sample" 【参考方案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

【讨论】:

哈哈,是的,没多久我就想通了,谢谢 :) 标记你作为答案!

以上是关于MY_Model - 动态更改表?的主要内容,如果未能解决你的问题,请参考以下文章

使用不同的 CSS 样式表动态更改 Angular 组件的样式

打字稿:如何在对象更改时使用动态表行更新表

如何在 laravel 4.2 中动态更改模型表?

Mysql - 通过引用另一个数据集动态更改列名

如何创建基于当前日期/月份动态更改列顺序的 sql 表?

Spark Project中动态更改表中要查询的列