0

一些背景:

  • 这适用于在不使用任何框架的情况下构建的 MVC 应用程序,但遵循 MVC 范例。
  • 我正在使用一个名为RedBean的 ORM 库来与数据库通信。
  • 虽然 RedBean 使用“bean”表示数据,但它支持将它们包装到模型中,因此模型可以提供自定义函数:

    $account = R::dispense('account');
    $account->name = "john";
    R::store($account);
    $account->getFormattedLastUpdatedTime('America/New_York');
    

现在的问题:

目前,模型的每个实例将代表数据库中的 1 行。如果我有一组帐户,那么我将拥有一组“帐户”模型。

在应用程序中,我有一个自定义配置文件字段的功能(别担心,虽然我没有使用 EAV :))。其中一张表存储这些字段(名称、描述等)的元数据,用于为这些自定义配置文件字段生成表单字段。同样,元数据的每一行代表 1 个表单字段,每一行由 1 个模型表示。

我现在希望编写一个方法来将所有这些行转换为一个表单对象,然后可以将其用于呈现和处理表单。但是,这种方法应该存在于哪里?我最初的想法是将它放在表示自定义配置文件字段元数据的模型中。

澄清:此功能不在account模型中,而是在profile_fields_meta模型中。

问题

由于每个模型应该代表 1 行,因此让模型返回一个从数据库中的 MULTIPLE 行生成的对象似乎有点“脏”。我是否正确地说这不是最好的方法?你建议我做什么?

4

2 回答 2

0

扩展 ArrayObject ( http://php.net/manual/en/class.arrayobject.php ) 或其他容器类来运行收集方法是正确的。如果指定,请尝试修改查询方法以返回自定义集合类中的数据,而不是数组。

于 2012-05-21T23:42:43.163 回答
0

MVC 没有任何内在的东西说“每个模型 [实例] 应该代表一行”。通常在 MVC 框架中,模型(至少如控制器所见)完全不了解数据存储,并且没有任何概念或直接映射到“行”。这不一定是 ORM 的情况,但模型不需要遵守 ORM 的约束。

但是,尽管如果不了解更多有关架构和实现的信息就很难判断,但您所描述的功能听起来并不适合您的 Account 模型。事实上,在我看来,您应该考虑拥有一个“FormField”模型,这样,用 Rails 的说法,Account“有很多”FormFields。

并且为了记录,EAV 并不总是坏的,它只是经常被滥用。

于 2012-05-21T23:44:29.827 回答