我有两个相似的表和两个相似的模型,除了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中。 但我不明白我如何用正确的表格给我模型。你能救我吗?
答案 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
的外键
这不是您问题的确切答案,而是更好的选择。