Модели

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

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

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

class Blog_model extends CI_Model {

	public $title;
	public $content;
	public $date;

	public function __construct()
	{
		// Call the CI_Model constructor
		parent::__construct();
	}

	public function get_last_ten_entries()
	{
		$query = $this->db->get('entries', 10);
		return $query->result();
	}

	public function insert_entry()
	{
		$this->title    = $_POST['title']; // please read the below note
		$this->content  = $_POST['content'];
		$this->date     = time();

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

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

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

}

Примечание

Способы, описанные в приведенном выше примере используют Квери билдер (конструктор запросов) базы данных методов.

Примечание

Для простоты в этом примере мы используем $_POST напрямую. Это вообще плохая практика, и более качественный подход может быть при использовании Входной библиотеки $this->input->post('title').

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

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

Базовый прототип для модели класса:

class Model_name extends CI_Model {

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

}

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

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

class User_model extends CI_Model {

	public 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->method();

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

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

$this->foobar->method();

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

class Blog_controller extends CI_Controller {

	public 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'] = 'mysqli';
    $config['dbprefix'] = '';
    $config['pconnect'] = FALSE;
    $config['db_debug'] = TRUE;
    
    $this->load->model('model_name', '', $config);