在CodeIgniter中使用模型

rab*_*ne9 4 php codeigniter

有人可以向我解释在CI中使用模型的好习惯吗?维基百科中的一篇文章将CI模型称为"完全可选且很少需要",这在任何方面都是正确的吗?

fir*_*ire 16

假设您需要调用一个get_user_info从数据库中检索用户信息的函数.你可以有这样的功能:

class Home extends Controller {

    function __construct() {
        parent::__construct();
    }

    function index() {
        $user = $this->get_user_info($_SESSION['user_id']);
        echo "Hello " . $user['first_name'];
    }

    function get_user_info($user_id) {
        $query = $this->db->query("SELECT * FROM users WHERE user_id = ?", array($user_id));
        return $query->row_array();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果你需要get_user_info在另一个页面上打电话怎么办?

在这种情况下,您必须将函数复制并粘贴到每个页面中,这样如果您有大量页面就很难维护(如果您需要将查询更改为JOIN到另一个表中,该怎么办?)

这也违背了不重复自己的原则.

模型用于处理所有数据逻辑和表示,返回已经加载到视图中的数据.最常见的是,它们被用作将数据库功能组合在一起的一种方式,使您可以更轻松地更改它们,而无需修改所有控制器.

class User extends Model {

    function __construct() {
        parent::Model();
    }

    function get_user_info($user_id) {
        $query = $this->db->query("SELECT * FROM users WHERE user_id = ?", array($user_id));
        return $query->row_array();
    }

}
Run Code Online (Sandbox Code Playgroud)

在上面我们已经创建了一个名为的模型user.在我们的家庭控制器中,我们现在可以将代码更改为:

class Home extends Controller {

    function __construct() {
        parent::__construct();
    }

    function index() {
        $this->load->model('user');
        $user = $this->user->get_user_info($_SESSION['user_id']);
        echo "Hello " . $user['first_name'];
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以更改get_user_info功能,而无需更改依赖于相同功能的X数量的控制器.

  • "模型只是将数据库功能组合在一起的一种方式,使您可以更轻松地更改它们,而无需修改所有控制器." ---模型不仅仅是将数据库功能组合在一起的手段; 它们用于处理所有数据逻辑和表示,返回已加载到视图中的数据. (2认同)