2011-01-07 111 views
8

使用codeigniter 1.7.3的同伴編碼器可以從另一個模型的代碼加載模型嗎?我已經閱讀了許多理論和實踐的文章,但沒有給出最終答案。從另一個模型加載和使用codeigniter模型

我有一個模型,有一個功能,我想在另一個模型上執行操作。代碼是這樣的:

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

line 1 works。

一個PHP錯誤遇到
嚴重性:2號線如下未能注意
消息:未定義的屬性:Account_model :: $ decision_model
文件名:型號/ account_model.php

我曾嘗試創建簡單啞模型,改變函數名稱,加載時給模型一個別名,等等......沒有運氣

所以理論拋開了,這是可行的嗎?

在此先感謝。

+0

通常,當模型引用另一個模型(例如,在RDBM中使用外鍵)時,您希望這樣做。在這種情況下,原始模型將具有引用鏈接模型的`decision_model`屬性。如果你沒有這樣的模型,那麼這些模型就不會被鏈接,並且從你的第一個模型中使用`$ this-> load`不會將加載的模型鏈接到任何有用的模型。 – Guss 2011-01-07 19:13:43

+0

你可能希望看看基於CI的Kohana框架,但允許這樣的事情。 – 2011-01-07 19:33:51

回答

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

試試這個:

$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()所有的地方工作的任何功能。