有人可以向我解释在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数量的控制器.
| 归档时间: |
|
| 查看次数: |
24503 次 |
| 最近记录: |