Скажем, вам нужно вызвать функцию с именем 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 для другой таблицы?)
Это также противоречит принципу не повторяйся .
Модели предназначены для обработки всей логики и представления данных, возвращая данные, уже загруженные в представления. Чаще всего они используются для группировки функций базы данных, что упрощает их изменение без изменения всех ваших контроллеров.
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, которые полагаются на одну и ту же функцию.