Получите помощь, поддержку и профессиональное общение в Клубе CodeIgniter

CodeIgniter User Guide Version 2.1.0


Модели

Модели опционально доступны для тех, кто хочет следовать более традиционному подходу MVC.

Что такое модель?

Модели — это классы PHP, которые разработаны, чтобы работать с информацией в базе данных. К примеру, давайте предположим, что вы используете CodeIgniter для управления блогом. Вы можете сделать класс модели, который будет содержать функции для вставки, обновления и получения данных вашего блога. Вот пример того, как может выглядеть класс модели:

class Blogmodel extends CI_Model {

    var $title   = '';
    var $content = '';
    var $date    = '';

    function __construct()
    {
        // вызываем конструктор модели
        parent::__construct();
    }
    
    function get_last_ten_entries()
    {
        $query = $this->db->get('entries', 10);
        return $query->result();
    }

    function insert_entry()
    {
        $this->title   = $_POST['title']; // прочитайте примечание ниже
        $this->content = $_POST['content'];
        $this->date    = time();

        $this->db->insert('entries', $this);
    }

    function update_entry()
    {
        $this->title   = $_POST['title'];
        $this->content = $_POST['content'];
        $this->date    = time();

        $this->db->update('entries', $this, array('id' => $_POST['id']));
    }

}

Примечание: Функции в примере выше используют функции Active Record.

Примечание: Для показательной простоты в этом примере мы использовали $_POST напрямую. Это очень плохая практика! Более подходящий путь — использовать класс Input $this->input->post('title')

Анатомия модели

Классы моделей хранятся в директории application/models/. Они могут быть организованы в поддиректории, если вам так больше нравится.

Основной прототип моделей таков:

class Model_name extends CI_Model {

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

Где Model_name — это имя вашего класса. Имена классов должны начинаться с большой буквы, а остальная часть названия должна быть в нижнем регистре. Убедитесь, что ваш класс расширяет основной класс Model.

Имя файла соответствует имени класса, но пишется полностью в нижнем регистре. Например, если ваш класс такой:

class User_model extends CI_Model {

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

Ваш файл будет таким:

application/models/user_model.php

Загрузка моделей

Ваши модели обычно будут загружаться и вызываться из функций ваших контроллеров. Чтобы загрузить модель, используйте следующую функцию:

$this->load->model('model_name');

Если ваша модель находится в поддиректории, включите относительный путь от директории моделей. Например, если модель находится в application/models/blog/queries.php, загружайте ее, используя:

$this->load->model('blog/queries');

Загруженная модель доступна для использования по имени ее класса:

$this->load->model('model_name');

$this->model_name->function();

Если вы хотите ассоциировать вашу модель с именем другого объекта, вы можете указать его во втором параметре функции:

$this->load->model('model_name', 'fubar');

$this->fubar->function();

Вот пример контроллера, который загружает модель, и затем обслуживает отображение:

class Blog_controller extends CI_Controller {

    function blog()
    {
        $this->load->model('blog');

        $data['query'] = $this->blog->get_last_ten_entries();

        $this->load->view('blog', $data);
    }
}

Автозагрузка моделей

Если вы обнаружили, что определенная модель вам необходима глобально во всем приложении, вы можете попросить CodeIgniter загружать ее автоматически при инициализации системы. Чтобы сделать это, откройте ваш файл application/config/autoload.php и добавьте модель в массив автозагрузки.

Соединение с вашей БД

При загрузке модель НЕ соединяется автоматически с БД. Вам доступны следующие опции для соединения.

Поделиться


Переведено в компании Аринт.

Спасибо!

Вы тоже можете оказать помощь проекту! Как это сделать?

Помощь и поддержка

Вы можете задать вопросы и получить ответы и советы от гуру CodeIgniter и веб-разработки: вступайте в Клуб CodeIgniter

Яндекс.Метрика