在另一个CodeIgniter模型中加载模型是否合适?

时间:2012-09-19 18:33:54

标签: php codeigniter

我有一个困扰我的建筑问题。

Codeigniter定义了model。现在有时候模型与另一个模型紧密相连。即用户和安全。

访问模型中的其他模型是不好的做法?

即。

class User extends CI_model 
{
    function getUser() 
    {
        $this->load->model('User');
        $user = // load user 

        $this->load->model('Security');
        $security = // load security

        $user->security = $security;
    }
}

有些人怎么感觉不到'犹太教'给我。感觉我需要在顶部安装DAO或某种DAL,然后可以加载两个模型并执行必要的提取,同时在模型中保留基本的CRUD和模型特定操作。如果我们确实创建了一个单独的层,那么将它们放在Codeigniter框架中似乎不是一个合理的位置。

2 个答案:

答案 0 :(得分:4)

这是可悲的部分:CodeIgniter没有实现MVC设计模式。它只是模仿Rails架构。有区别。

CodeIgniter中所谓的“模型”通常是active record(反)模式的实现。它们将域业务逻辑的职责与存储逻辑相结合。

因此,如果您正在使用标准CI代码,那么您不应该这样做。您无法在另一个CI_Model实例中调用$this->load->model(),因为它没有此类功能CI_Controller

相反,您必须覆盖默认的__construct(),它将访问CI的全局实例并将其绑定到$this->load变量。基本上这将是一个黑客。

最好在控制器中实例化“模型”并手动注入这些依赖项。


然后再次..你正在使用CodeIgniter,所以谁关心开发原则。

答案 1 :(得分:0)

查看DataMapper ORM

DataMapper ORM for CodeIgniter

来自网站:

  

DataMapper是一个用PHP编写的CodeIgniter对象关系映射器。它旨在将您的数据库表映射到易于使用的对象,完全了解彼此之间的关系。