某些背景:
虽然RedBean使用“beans”表示数据,但它支持将它们包装到模型中,因此模型可以提供自定义函数:
$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行生成的对象似乎有点“脏”。我是否正确地说这不是最好的方法呢?你建议我做什么呢?
答案 0 :(得分:0)
使用扩展的ArrayObject(http://php.net/manual/en/class.arrayobject.php)或其他容器类来运行收集方法是正确的。 尝试修改查询方法以返回自定义集合类中的数据,而不是指定数组。
答案 1 :(得分:0)
MVC并没有什么固有的说法,“每个模型[实例]应该代表一行。”通常在MVC框架中,模型(至少由控制器看到)完全不了解数据存储,并且没有任何概念或直接映射到“行”。这不一定是ORM的情况,但模型不需要遵守ORM的约束。
但是,虽然在不了解您的架构和实现的情况下很难说清楚,但您所描述的功能并不适合您的帐户模型。事实上,我觉得你应该考虑使用“FormField”模型,这样在Rails的说法中,Account“有很多”FormFields。
并且为了记录,EAV并不总是坏的,它经常被滥用。