假设您需要调用一个名为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();
}
}
但是,如果您需要打电话怎么办?get_user_info
在另一页上?
在这种情况下,您必须将函数复制并粘贴到每个页面中,如果您有很多页面,则很难维护(如果您需要将查询更改为 JOIN 到另一个表上怎么办?)
这也违背了不要重复自己 http://en.wikipedia.org/wiki/Don%27t_repeat_yourself原则。
模型旨在处理所有数据逻辑和表示,返回已加载到视图中的数据。最常见的是,它们用作将数据库功能分组在一起的一种方式,使您可以更轻松地更改它们,而无需修改所有控制器。
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();
}
}
在上面我们现在创建了一个名为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'];
}
}
现在你可以改变你的get_user_info
功能,而无需更改 X 个依赖相同功能的控制器。