我有一个模型(称为Model_A),用于在$name var定义的特定表上进行CRUD。如果另一个模型中的第一个操作成功,我还需要更新另一个表(称为具有不同$name变量的Model_B )。
我正在尝试从类Model_A中的操作更新以Model_B表示的表。我通过在Model_A中的操作中创建Model_B的实例来完成此操作。更新操作失败,因为它似乎尝试从Model_A写入表$name,而不是从Model_B的实例写入表$name。
我想我可以将第一次更新的结果传递回控制器,然后转到第二个模型,但我更愿意同时进行这两次更新。
除了我的代码中的错误之外,还有什么明显的原因导致我的第二次更新没有找到正确的表。对于我想要做的事情,这是一个合理的方法吗?
发布于 2011-08-24 07:31:20
大多数人认为模型与表类是一致的。事实上,它们使模型扩展了一个基表类。对于大多数简单的CRUD类型的工作,这或多或少都很好。但是,当您跨多个表或事务脚本进行更复杂的更新时,您会发现像您所询问的那样的尴尬情况。
事实上,a model不是一个表。a model是对应用程序业务的某些逻辑部分的封装,而不是将其存储在数据库中的实现。
我在几年前就开始编写Zend_Db_Table的代码,在编写手册时,我非常小心地避免将表类称为模型。
因此,您可能需要引入一个真正的Model类层(它不扩展基类),它知道如何对一个或多个数据库表执行特定于应用程序的操作,但它不是应用程序的控制器。
Controller -> Model -> Table(s)如果您有从多个控制器调用的类似业务任务,则此体系结构是避免重复代码的好方法。它有助于将应用程序功能和持久性细节从控制器中解耦出来,这在代码维护、可测试性、封装等方面都有好处。
查看免费的迷你书Domain-Driven Design Quickly (基于Eric Evans的书籍),或者我的书SQL Antipatterns: Avoiding the Pitfalls of Database Programming中的“魔豆”一章。
发布于 2011-08-24 10:02:17
Zend_Db_Table有一个名为"RefrenceMap“的重要属性,您可以在其中定义一个表如何链接到另一个表的逻辑检查下面的url以读取进一步的http://framework.zend.com/manual/en/zend.db.table.relationships.html
https://stackoverflow.com/questions/7168684
复制相似问题