Codeigniter не позволит мне назвать модель из модели, это правда
Так что я часами пытался заставить это работать, но не смог!
У меня есть базовая модель, которая загружает другие модели. Эти другие модели во время своей функции построения ссылаются на некоторые переменные из базовой модели. Например:
Модель пользователя:
Проверьте, вошел ли пользователь в систему, и если да, то он загрузит его модель отношений.
Модель отношений:
Пытается загрузить отношение этого пользователя во время построения. Так я попробовал $this->user->id
например, но выдает ошибку " Undefined property "
!
Я попытался преобразовать свою базовую модель в библиотеку и попробовал еще раз, но она не работает!
Теперь это разочаровывает и странно! Для этого есть причина? Можем ли мы это исправить?
Я разработал весь рабочий процесс на основе этой модели, чтобы вызывать другие модели и передавать данные из третьей модели и т. Д.
Мне нравится держать мои контроллеры настолько тонкими, насколько это возможно. Это противоречит принципам КИ?
3 ответа
Попробуйте следующий код в вашей модели для доступа user
модель
$CI =& get_instance();
$CI->load->model('user');
// Call new model functions using handle to main CI object
echo $CI->user->id
Начиная с CodeIgniter v2.XX,это возможно и полностью поддерживается для вызова другой модели из вашей текущей модели.
Во-первых, убедитесь, что у вас установлена последняя версия CodeIgniter (или, по крайней мере, v2.01 и выше).
Затем все, что вам нужно сделать, это расширить классы CodeIgniter следующим образом:
$CI =& get_instance(); (Instead of $CI you can choose any other variable)
Теперь загрузите вашу модель, как вы все время, но на этот раз, вместо того, чтобы использовать сохраненное слово $this
это работает только внутри ваших контроллеров, вы будете использовать новую расширенную переменную $CI
:
$CI->load->model('user');
Теперь вы можете вызывать любую функцию внутри вашего user
модель и, конечно, просматривать ваши id
:
echo $CI->user->id;
Вы также можете взглянуть на этот пост для получения дополнительной информации.
Удачи!
Модели /user_model.php
class User_model extends CI_Model {
public $id;
public function __construct() {
parent::__construct();
}
}
модели /base_model.php
class Base_model extends CI_Model {
public function __construct() {
parent::__construct();
$this->load->model('user_model');
//load other models..
//$this->user is available in your base model
var_dump( $this->user_model->id );
}
}
Контроллеры /welcome.php
class Welcome extends CI_Controller {
public function index() {
$this->load->model('base_model');
//$this->user is available in your controller if you load base model
var_dump( $this->user_model->id );
}
}
О вашем последнем вопросе посмотрите эту толстую модель или толстый контроллер?