一个模型到不同的表

时间:2014-08-11 10:31:15

标签: php codeigniter

我有两个相似的表和两个相似的模型,除了teables的名称。在控制器中,我在构造函数中调用两个不同的模型:

$this->load->model('sites_model', 'sites');
$this->load->model('servers_model', 'servers');

但我不需要重复代码。我找到了解决这个问题的方法:

class My_Model extends CI_Model 
{
    protected $table = NULL;

    public function __construct($table = '')
    {
        parent::__construct();
        $this->table = $table;
    }
}

此模型存储在application / core / MY_Model.php中。 但我不明白我如何用正确的表格给我模型。你能救我吗?

3 个答案:

答案 0 :(得分:1)

在MY_Model.php中:

public function set_table($table = '')
{
    $this->table = $table;
}

使用:

创建一个新模型'blank_model.php'
class Blank_model extends MY_Model
{
   public function __construct()
   {
       parent::__construct();
   }
}

然后从你的控制器:

$this->load->model('blank_model');
$this->blank_model->set_table('Name of table');

答案 1 :(得分:0)

没有办法将参数传递给我所知道的模型构造函数。但是您可以添加模型方法来更新要访问的表。

// method goes into MY_Model.php
public function set_table($table_name)
{
    $this->table = $table_name;
}

然后从控制器中你可以这样做:

$this->model->set_table('my_table');

答案 2 :(得分:0)

我建议您在数据库结构中进行轻微修改。它会使灵活更加强大,并且可以避免代码重复。查看以下数据库结构

actual_table:

id  |  column1  |  column2  |  column3  |  column4  |  type_id
1   |  value11  |  value12  |  value13  |  value14  |  1            # sites
2   |  value21  |  value22  |  value23  |  value24  |  2            # servers
3   |  value31  |  value32  |  value33  |  value34  |  1            # sites


type_table:

id  |  name
1   |  sites
2   |  servers


由于两个表的结构相同,因此不需要 db和代码重复。而是创建一个包含类型(即网站,服务器)的表格,并为网站/服务器创建一个表格,添加新列 {{1} type_id 外键

这不是您问题的确切答案,而是更好的选择