Zend 中的每个表都必须映射到自己的类吗?

Posted

技术标签:

【中文标题】Zend 中的每个表都必须映射到自己的类吗?【英文标题】:Does every single table in Zend have to map to its own Class? 【发布时间】:2010-08-27 16:25:43 【问题描述】:

我并不是说所有模型都是表格。

我要问的是,在使用 Zend 时,是否每个表也必须有专门为它定义的类?有什么办法可以摆脱这种笨拙的样板编码。我们刚刚开始研究 Zend(希望离开程序化 php 领域!),我的同事认为这最终可能会非常耗时。

这是人们使用 ORM 解决方案的原因吗?有没有其他办法解决这个问题?

感谢您的回复。

【问题讨论】:

【参考方案1】:

Zend Table 类遵循Table Data Gateway 模式,根据定义

... 包含用于访问单个表或视图的所有 SQL:选择、插入、更新和删除。其他代码调用它的方法来与数据库进行所有交互。

In the book、Fowler 没那么死板,这么说

对于非常简单的情况,您可以使用一个 TDG 来处理所有表的所有方法。您甚至可以拥有一个用于视图,甚至用于未作为视图保存在数据库中的有趣查询。

但是,除了可以使用 Views 之外,Zend_Db_Table 不支持此操作。您可以创建对多个表的查询,但必须直接通过Zend_Db_Adapter 进行查询,或者 - 当使用连接时 - 通过关闭完整性检查。否则,你必须使用Zend_Db_Table Relationships提供的API

所以是的,一个实例应该对应一个表或视图。如果您不打算扩展类,则不需要为此创建类。 Zend_Db_Table_Definitions 允许您动态配置 Zend_Db_Table 实例。

请注意,TDG 是一种数据源架构模式,而不是一种对象关系模式。它的目的不是帮助impedance-mismatch,而是将数据库访问代码与业务逻辑分开。

【讨论】:

以上是关于Zend 中的每个表都必须映射到自己的类吗?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中的“每个派生表都必须有自己的别名”是啥错误?

MySQL中的“每个派生表都必须有自己的别名”是啥错误?

MySql + 实体框架 = 每个派生表都必须有自己的别名

MySQL UNION - 每个派生表都必须有自己的别名

错误代码:1248。每个派生表都必须有自己的别名 没有找到查询的解决方案

你可以扩展 SQLAlchemy 查询类并在同一个会话中使用不同的类吗?