我正在一个应用程序中工作,我需要动态创建数据库表,我做到了。但现在我需要一种优雅的方式来访问数据库表。所以这是我的问题
在常规练习中,我们创建一个数据库表并创建一个映射表(ORM)的类。但在这种情况下我不能采取这种方法。这就是我到目前为止所做的......
我正在扩展Crud模型中的MY_Model,我尝试在set_table()方法中设置数据库表名。它工作正常。
class Crud extends MY_Model
{
private $customer_id;
public function __construct()
{
parent::__construct();
$this->_database = $this->load->database('customer', TRUE);
}
public function set_table($customer_id, $table_name)
{
$this->customer_id = $customer_id;
$this->_table = 'tbl_' . $customer_id . '_' . $table_name;
}
}
Test.php控制器来测试代码。
class Test extends CI_Controller
{
public function index(){
$this->load->model('editor/crud');
var_dump($this->crud->set_table(1, 'alpha'));
var_dump($this->crud->get_all());
}
}
但我需要一种优雅的方式来访问该表。例如。
$this->alpha->get_all()
OR
$this->crud->alpha->get_all()
很容易理解&这会很有意义。它实际上可以用PHP做吗?任何帮助都会非常明显。
答案 0 :(得分:0)
我猜你可以这样做:
class Test extends CI_Controller
{
public function index(){
$this->load->model('editor/crud');
$this->crud->set_table(1, 'alpha');
$this->alpha = clone $this->crud; // in case you use set_table again
$info = this->alpha->get_all();
}
}
如果我没记错的话,你也应该能够在模型中做到这一点。
public function set_table($customer_id, $table_name)
{
$this->customer_id = $customer_id;
$this->_table = 'tbl_' . $customer_id . '_' . $table_name;
$this->{$table_name} = clone $this;
}
然后访问它:$this->crud->alpha->get_all()
;