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