Php 为多个表一起设计Zend模型?

Php 为多个表一起设计Zend模型?,php,zend-framework,model,Php,Zend Framework,Model,我正在使用Zend Framework构建一个web界面,用于为自定义CMS的用户设置ACL(权限)。由于ACL数据分布在5个表中(用户、组、权限、URL=action+controller,用户可以理解的权限名称很好),并且我只有一个控制器具有四个基本CRUD(创建、列表、更新、删除)操作,我想知道最好的方法是什么 我在书中看到的所有示例都是每个模型扩展了Zend\u Db\u Table\u Abstract,因此表示一个表 我在想,我必须做一个不扩展zend_db_table_abstra

我正在使用Zend Framework构建一个web界面,用于为自定义CMS的用户设置ACL(权限)。由于ACL数据分布在5个表中(用户、组、权限、URL=action+controller,用户可以理解的权限名称很好),并且我只有一个控制器具有四个基本CRUD(创建、列表、更新、删除)操作,我想知道最好的方法是什么

我在书中看到的所有示例都是每个模型扩展了Zend\u Db\u Table\u Abstract,因此表示一个表

我在想,我必须做一个不扩展zend_db_table_abstract的模型,然后手工编写所需的查询,从而将自己局限于mysql数据库

p、 请不要争论acl数据库结构

谢谢

这是

充当数据库表网关的对象。一个实例处理表中的所有行

这就是为什么您不会看到它在Zend框架中有任何不同的用途。还有一段时间,您要问的是一个特定于域的类

您遇到的是,这意味着您的业务对象与数据库设计的结构不匹配。常见的解决方案是使用或为您处理该问题


另一个解决方案是在数据库中创建一个视图,该视图以1:1映射到所需业务对象的方式连接表。然后为该视图添加一个
Zend\u Db\u表
。不过,您仍然需要定制创建、更新和删除逻辑。虽然这不是数据映射,但如果您没有任何业务/域类可以映射到,这很好。

因此,如果我手动编写模型的4个函数(getAll、deleteById、create、updateById),这将等同于数据映射正确吗?@max4ever我不确定您对模型的定义是什么。模型不仅仅是数据库。数据库是持久层。这是模型的一部分,但不是模型。模型中可能还有其他几个层。对不起,我将模型定义为MVC模式中的M,我认为数据库中的视图是不允许的,所以我可以在上面描述的4个函数中使用“select…from…”查询来构建相同的抽象,而不是在数据库中构建视图,对吗/@max4只是回答您的问题:您的映射器将是域层和持久层之间的中介。它应该知道如何在域和持久层之间映射。这意味着,它应该知道调用域和持久层对象的方法,以便在它们之间传输数据。它不应包含与数据库对话的逻辑或域对象的任何逻辑。@max4是的,您可以这样做。严格地说,那不是一个数据映射器,而是一个自定义表数据网关。如果您的模型中没有专用的域层,这很好。