Главная > CodeIgniter > Удобное расширение модели CodeIgniter

Удобное расширение модели CodeIgniter


Автор кода – Ерёмин Никита. Спасибо за красивое и удобное решение.
В system/application/models создаем файл base_model.php. В этом файле и будет описан наш класс, который расширяет основную модель фреймворка:


Все остальные наши модели объявляем уже как расширения нашей base_model.
Например, создадим модель user_model. В файле user_model.php размещаем такой код:

Наша новая модель унаследовала весь функционал base_model. Т.е. она может выбирать данные из таблицы user, вставлять, обновлять, удалять, считать количество записей:

Второе правило можно изменить под свои привычки, тогда нужно будет внести соответствующие корректировки в эти две строчки кода (в конструкторе base_model):

Можно, вообще избавиться от ограничений по именованию классов и переписать все функции, для приема имени таблицы в качестве параметра. Но, это дело вкуса. Как по мне, то проще соблюсти несложные правила.



  1. 19 Ноя 2009 из 11:27 | #1

    Константин, спасибо за замеченные ошибки!
    1. $this->order_by($order_by); Подразумевалась собственная функция сортировки, но я её опустил (для упрощения), а обращался по прежнему к ней. Вообщем, сейчас исправил на $this->db->order_by($order_by);
    2. $this->db->select(’*’); всегда пишу для читабельности.
    3. Добавил определение protected static $count;

  2. Константин
    19 Ноя 2009 из 1:51 | #2

    В методе get_all ошибка:

    вместо $this->order_by($order_by);
    нужно $this->db->order_by($order_by);

    Кроме того не обязательно $this->db->select(‘*’);

    В строке self::$count = $this->db->count_all_results(”, true);
    ругается на self::$count и не отрабатывает $this->db->count_all_results(”, true); – не видит таблицу (хотя по дебагу имя таблицы из имени модели определяет точно. Если эту строчку удалить , то функция отрабатывается нормально.

  1. Трекбеков пока нет.