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

# CodeIgniter User Guide Version 2.1.0

Search User Guide

# Модели

Модели опционально доступны для тех, кто хочет следовать более традиционному подходу 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 и добавьте модель в массив автозагрузки.

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

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

- Вы можете соединяться, используя стандартные методы, описанные здесь, либо из контроллера, либо из модели.
- Вы можете сказать модели использовать функцию автосоединения, передав TRUE в третьем параметре, и настройки соединения, определенные в конфигурации БД: `$this->load->model('model_name', '', `TRUE`);`
- Вы можете вручную передать настройки для соединения с БД в третьем параметре: `$config['hostname'] = "localhost";
  $config['username'] = "myusername";
  $config['password'] = "mypassword";
  $config['database'] = "mydatabase";
  $config['dbdriver'] = "mysql";
  $config['dbprefix'] = "";
  $config['pconnect'] = FALSE;
  $config['db_debug'] = TRUE;
  $this->load->model('model_name', '', `$config`);`

### Поделиться

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

# Спасибо!

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

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

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