【问题标题】:PHP: MVC and ModelPHP:MVC 和模型
【发布时间】:2010-05-06 06:07:51
【问题描述】:

我一直想知道关于创建模型的这一点。 如果我制作例如 Page 模型。两者兼而有之:它可以从表中检索一行或所有行。不知何故,我混合了对象和数据库。

我是这样想的: 我必须创建一个代表表中一行的 Page-class。它还将具有所有基本的 CRUD 方法。

然后我必须做一个 Pages 类(某种集合),它会从表中检索行并从每一行实例化一个 Page 对象。有这么奇怪吗?

如果有人能从头到尾向我解释模型的想法。我又困惑了。

也许我认为整个 OOP 太难了..

顺便说一句,这个论坛很棒。希望人们能理解我的问题。呵呵。我是一个长期的程序风格程序员,现在在 3 个月内我已经深入研究了 OOP、MVC 和 PHP 框架,当我探索这些东西时,我一天比一天兴奋!

【问题讨论】:

标签: php model-view-controller model


【解决方案1】:

这取决于您的模型是代表实例还是只是 ORM 对象。

如果一个模型代表一个实例,那么数据库中的每条记录(行)都将成为一个新的模型对象。 “所有记录”将简单地由这些对象的数组表示。例如,Ruby on Rails 就是这样做的。

如果你的模型是一个 ORM 对象,它只是代表数据库,并允许你通过它从数据库中检索记录。结果可能在某个容器对象中,或者只是一个普通数组。例如 CakePHP 就使用了这种方法。

【讨论】:

  • Cake 和 RoR 使用 ActiveRecord。 Rowset('所有记录')没有理由必须是一个数组。可以是 SplObjectStorage 或专用行集类,如 Zend_Db_Rowset。我不确定你所说的 ORM 对象是什么意思,但我猜你的意思是一个 QueryObject。请注意,还有 TableData Gateway、RowData Gateway 和 DataMapper。无论如何,模型不仅仅是数据库。
  • @Gordon Cake 使用的“ActiveRecord”并不是真正的 ActiveRecord。您不能拥有一个模型的多个实例,只有一个实例可以提供数据或从中获取数据。将其称为 QueryObject 或您喜欢的任何其他名称。请原谅这个简化答案的其余部分没有涵盖所有可能的情况,我试图说明 OP 的一般差异。
  • 我很确定我已经编写了可以在任何我喜欢的地方执行 new User 的 Cake 代码。嗯,不过从那以后已经有一段时间了。也许他们改变了它:)
  • @Gordon Cake 的模型真的很 hacky。他们试图复制 RoR 处理数据的方式,而不是完全 OOP 以实现 PHP4 兼容性。结果是一个“ActiveRecord”,它实际上是一个“QueryObject”,可以像一个记录一个对象一样工作,但实际上并不是这样。 $Model->find('all') 总是返回一个简单的数据数组,而$Model->read() 也返回一个数据数组但也在内部设置数据。数据数组显然比 RoR 样式模型更受欢迎。
  • str_replace("Cake's models are", 'Cake is', $previousComment); ;))
【解决方案2】:

是否两者兼有:它可以检索一个 表中的行或所有行。

您可以使用模型与数据库进行交互,在那里您可以做任何您喜欢的事情,例如获取一条或多条记录、插入记录、更新等。

我建议您的方法是为您网站上可能与数据库交互的每个不同页面创建一个模型。您可能希望根据页面与数据库交互的要求在单个模型中为单个页面创建不同的函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    相关资源
    最近更新 更多