1

我有一个建筑问题一直困扰着我。

Codeigniter 定义了这样的模型。现在有时一个模型与另一个模型紧密相关。即用户和安全。

在模型中访问另一个模型是不好的做法吗?

IE

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 框架中似乎不合逻辑。

4

2 回答 2

4

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

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

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

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

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


话又说回来..您正在使用 CodeIgniter,所以谁在乎开发原则。

于 2012-09-19T19:10:12.270 回答
0

查看 DataMapper ORM

CodeIgniter 的 DataMapper ORM

从网站:

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

于 2012-09-19T18:39:21.060 回答