Codeigniter 3创建动态方法

时间:2015-11-03 11:14:17

标签: php mysql codeigniter

我正在一个应用程序中工作,我需要动态创建数据库表,我做到了。但现在我需要一种优雅的方式来访问数据库表。所以这是我的问题

在常规练习中,我们创建一个数据库表并创建一个映射表(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做吗?任何帮助都会非常明显。

1 个答案:

答案 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();