Codeigniter不会让我从模型中调用模型,这是真的

时间:2013-05-05 20:17:44

标签: php codeigniter scope magic-methods

所以我已经花了好几个小时才能让这个工作起来但不能!

我有一个加载其他模型的基础模型。构造函数中的这些其他模型引用了基本模型中的一些变量。例如:

用户模型:

检查用户是否已登录,如果是,则让他加载他的关系模型。

关系模型:

尝试在构建期间加载该用户的关系。例如,我尝试$this->user->id,但它会抛出错误" Undefined property "

我尝试将我的基本模型转换为库并再次尝试,但它无效!

现在这是令人失望和奇怪的!是否有一个原因?我们可以解决它吗?

我根据这种模型设计了我的整个工作流程来调用其他模型并从第三个模型中提取数据等。

我喜欢让我的控制器尽可能薄。这是针对CI原则的吗?

3 个答案:

答案 0 :(得分:2)

尝试使用模型中的以下代码来访问user模型

$CI =& get_instance();
$CI->load->model('user');
// Call new model functions using handle to main CI object
echo $CI->user->id

答案 1 :(得分:1)

  

可以完全支持,因为CodeIgniter v2.XX可以从您当前的模型调用另一个模型。

首先,确保您拥有latest version 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;

您还可以查看this帖子以获取更多信息。

祝你好运!

答案 2 :(得分:-1)

模型/ 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 );
    }
}

关于您的上一个问题,请查看此fat model or fat controller?