CodeIgniter User Guide Version 2.0.0


Модели

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

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

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

class Blogmodel extends CI_Model {

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

    function __construct()
    {
        // Call the Model constructor
        parent::__construct();
    }
    
    function get_last_ten_entries()
    {
        $query = $this->db->get('entries', 10);
        return $query->result();
    }

    function insert_entry()
    {
        $this->title   = $_POST['title']; // please read the below note
        $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 и добавив модель в список.

Примечание переводчика: исследуйте комментарии в файле application/config/autoload.php

Соединение с вашей базой данных

При загрузке модели она НЕ соединяется автоматически с вашей базой данных. Доступны следующие опции для соединения: