Модели (Models)

 

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

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

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

  1. class Blogmodel extends Model {
  2.  
  3. var $title = '';
  4. var $content = '';
  5. var $date = '';
  6.  
  7. function Blogmodel()
  8. {
  9. // Call the Model constructor
  10. parent::Model();
  11. }
  12.  
  13. function get_last_ten_entries()
  14. {
  15. $query = $this->db->get('entries', 10);
  16. return $query->result();
  17. }
  18.  
  19. function insert_entry()
  20. {
  21. $this->title = $_POST['title'];
  22. $this->content = $_POST['content'];
  23. $this->date = time();
  24.  
  25. $this->db->insert('entries', $this);
  26. }
  27.  
  28. function update_entry()
  29. {
  30. $this->title = $_POST['title'];
  31. $this->content = $_POST['content'];
  32. $this->date = time();
  33.  
  34. $this->db->update('entries', $this, array('id', $_POST['id']));
  35. }
  36.  
  37. }

Примечание: код примера использует функциональность _Active Record_.

Состав модели

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

  1. class Model_name extends Model {
  2.  
  3. function Model_name()
  4. {
  5. parent::Model();
  6. }
  7. }

Здесь Model_name - имя класса модели. Имена классов модели обязательно должны начинаться с заглавной буквы, остальные буквы названия класса должны быть строчными. Класс модели обязательно должен быть потомком класса Model
Имя файла с классом модели должно быть именем класса модели в нижнем регистре.Например, для класса:

  1. class User_model extends Model {
  2.  
  3. function User_model()
  4. {
  5. parent::Model();
  6. }
  7. }

Имя файла должно быть: application/models/user_model.php

Загрузка модели

Модели в вашем приложении как правило будут использоваться в функциях контроллера. Для того, чтобы загрузить модель вам понадобиться использовать следующую функцию:

  1. $this->load->model('Model_name');

Если ваш класс модели расположен в под-каталоге, понадобиться указать относительный путь от каталога models. К примеру, если класс модели расположен application/models/blog/queries.php, то для загрузки нужно использовать код:

  1. $this->load->model('blog/queries');

После загрузки модели вы можете обращаться к ее функциям используя объект с тем же именем, что и название класса:

  1. $this->load->model('Model_name');
  2.  
  3. $this->Model_name->function();

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

  1. $this->load->model('Model_name', 'fubar');
  2.  
  3. $this->fubar->function();

Вот пример контроллера, который подключает модель, а затем представление:

  1. class Blog_controller extends Controller {
  2.  
  3. function blog()
  4. {
  5. $this->load->model('Blog');
  6.  
  7. $data['query'] = $this->Blog->get_last_ten_entries();
  8.  
  9. $this->load->view('blog', $data);
  10. }
  11. }

Авто-загрузка модели

Если вам нужно использовать какую-либо модель во всем своем приложении, вы можете указать CodeIgniter загрузку этой модели при инициализации. Это реализуется в файле application/config/autoload.php

Подключение к базе данных

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

  • Вы можете воспользоваться _стандартным способом_ подключения к базе данных, либо из контроллера, либо из класса модели.
  • Вы можете указать функции загрузки модели автоматически выполнить подключение к базе данных, задав TRUE в качестве третьего параметра:
    1. $this->load->model('Model_name', '', TRUE);

    при этом будут использоваться те параметры подключения к базе данных, которые заданы в конфигурационном файле приложения.
  • Вы можете передать настройки подключения в виде массива в качестве третьего параметра для функции подключения модели:
    1. $config['hostname'] = "localhost";
    2. $config['username'] = "myusername";
    3. $config['password'] = "mypassword";
    4. $config['database'] = "mydatabase";
    5. $config['dbdriver'] = "mysql";
    6. $config['dbprefix'] = "";
    7. $config['pconnect'] = FALSE;
    8. $config['db_debug'] = TRUE;
    9.  
    10. $this->load->model('Model_name', '', $config);

Отправить комментарий

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <b> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <p> <h2> <h3>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]". PHP source code can also be enclosed in <?php ... ?> or <% ... %>.

Подробнее о форматировании

CAPTCHA
Этот вопрос предназначен для того, чтобы отсеять ботов
2 + 10 =
Решите простой математический пример и введите результат. К примеру, для вопроса 1+3 нужно ввести 4

Вход в систему

Последние комментарии