2011-01-07 2 views
8

Коллеги, использующие codeigniter 1.7.3 Могу ли я загрузить модель из кода другой модели? Я прочитал много сообщений теоретических и практических, но никто не дал окончательного ответа.Загрузка и использование модели codeigniter из другой модели

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

1: $this->load->model('decision_model'); 
2: $this->decision_model->hello_decision(); 

линия 1 работает. линия 2 терпит неудачу следующим образом:

PHP-ошибка была обнаружена
Серьезность: Уведомление
Сообщение: Не определено свойство: Account_model :: $ decision_model
Имя файла: модели/account_model.php

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

Итак, теория в стороне, это выполнимо?

благодарит заранее.

+0

Обычно вы хотите сделать это, когда модель ссылается на другую модель (например, используя внешний ключ в RDBM). В этом случае исходная модель будет иметь атрибут 'decision_model', который ссылается на связанную модель. Если у вас их нет, то модели не связаны и использование '$ this-> load' из вашей первой модели не свяжет загруженную модель с чем-либо полезным. – Guss

+0

Возможно, вы захотите ознакомиться с каркасом Kohana, который основан на CI, но позволяет такие вещи. –

+0

@ Guss, обе модели должны быть связаны - вот почему я пытаюсь получить доступ ко второй модели. Если у меня есть ссылка (я предполагаю, что вы ссылаетесь на атрибут класса) в исходной модели, как бы инициализировать ее для ссылки на модель принятия решений? спасибо – djeetee

ответ

13

Вы можете сделать это следующим образом:

class User_model extends Model 
{ 
    function get_something() 
    { 
     $CI =& get_instance(); 
     $CI->load->model('profile_model'); 
     return $CI->profile_model->get_another_thing(); 
    } 
} 
+0

, который сделал это! Большое спасибо :) Я делал что-то подобное, но переводил код в помощника и все такое. это становилось довольно уродливым. еще раз спасибо. – djeetee

+6

В CI 2.0 вы можете просто называть одну модель напрямую от другой. – phirschybar

+0

@phischybar, вы понимаете, что это 1.7.3, правильно? –

0

Попробуйте это:

$this->load->model('decision_model'); 
$CI =& get_instance(); 
$CI->decision_model->hello_decision(); 
3

В CI 2.0 вы можете просто позвонить по одной модели непосредственно от другого.

0

Вы также можете добавить переменную класса private $_ci; и инициализировать ее в своем конструкторе.

public function __construct($input=null) 
{ 
    $this->_ci =& get_instance(); 

    if ($input != null && is_array($input)) { 
     $this->populate($input); 
    } 
} 

Тогда она будет доступна для любой функции вы работаете, не нужно get_instance() повсюду.

Смежные вопросы