CodeIgniter, руководство пользователя к версии 1.6.1


Модели

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

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

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

class Blogmodel extends Model {

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

    function Blogmodel()
    {
        // Call the Model constructor
        parent::Model();
    }
    
    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.

Устройство модели

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

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

class Model_name extends Model {

    function Model_name()
    {
        parent::Model();
    }
}

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

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

class User_model extends Model {

    function User_model()
    {
        parent::Model();
    }
}

Имя файла должно быть таким:

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 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 и добавив модель в массив автозагрузки.

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

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