Расширение нескольких моделей в Codeigniter 2

Как настроить CI2, чтобы разрешить расширение нескольких моделей?

Я могу получить его только для расширения одной модели ( введите / application / core) с именем MY_Model (с учетом регистра).

Чтобы выбрать, какую модель расширить, я делаю; в модели ..

require_once APPPATH.'core/MY_Another_model.php'; class Test_model extends MY_Another_model { ... } 

Я не могу найти, где в основном системном коде, где он указывает только на то, чтобы разрешить модели, которые продлеваются, называться MY_Model.

Спасибо за любую помощь.

Solutions Collecting From Web of "Расширение нескольких моделей в Codeigniter 2"

Как я уже сказал в этом вопросе о контроллерах, вы просто помещаете оба класса в один файл MY_Model. Этот файл используется как часть функции автозагрузки codeigniter, что означает, что он будет искать любые файлы с префиксом MY_ (или конфигом).

Вам даже не нужно вызывать класс внутри MY_Model, вы можете назвать его MY_Special_Model и иметь MY_Another_Model прямо под ним

Я пробовал Cubed Eye, и он работает, но вот еще один вариант:

Попробуйте добавить модель в файл autoload.php. Он может наследовать от MY_Model (который наследуется от CI_Model), и любые дополнительные модели, которые вы загрузили, могли бы наследовать от него:

 class Extended_model extends MY_Model { public function __construct() { parent::__construct(); $this->load->model('Another_model'); } } 

(Модели / Extended_model.php)

 class Another_model extends Extended_model { } 

(Модели / Another_model.php)

EDIT: Я просто понял, что вы помещаете свою расширенную модель в «основную» папку. Это необходимо только для классов, которые расширяют основные классы CI_ * (т.е. MY_Controller, MY_Model, MY_Input и т. Д.). Если у вас есть модель, расширяющая MY_Model, поместите ее в свои модели / папку и не префикс ее с помощью «MY_».

В конце концов вы можете попробовать этот хак, используя функцию load_class :

Это расширение вашей модели:
приложение / ядро ​​/ Special_model_class.php:

 class CI_Special_model_class extends CI_Model {...} 

Имя файла php не имеет префикса CI_, хотя сам класс имеет префикс!

Модель, основанная на этом классе в папке models /:
приложение / модели / one_model.php:

 class One_model extends CI_Special_model_class {...} 

Чтобы выполнить эту работу, вы должны вызвать функцию load_class из контроллера:
приложение / контроллеры / one_ctrl.php

 .... load_class('Special_model_class', 'core'); $this->load->model('Special_model_class'); .... 

В конце концов, вы можете попытаться вызвать load_class внутри модели, прямо перед ее определением. приложение / модели / one_model.php:

 load_class('Special_model_class', 'core'); class One_model extends CI_Special_model_class {...} 

Вот родительский класс модели:

 class MY_Common_Model extends CI_Model { function __construct() { parent::__construct(); } function drop_table($table_name) { $this->connect(); $this->dbforge->drop_table($table_name); } } 

Вот класс дочерних моделей:

 class MY_Model extends MY_Common_Model { function inset_table($table_name) { $this->connect(); $this->insert_table($table_name); } } 

в модели:

  $this->drop_table($edge_table);