Модели

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