我创建一个应用程序,用户将可以创建阶段将数据存储在数据库,这个领域将收到不同种类的数据,像日期,或货币价值。

我的初步想法创造这个该领域是储存在数据库表(如:meta_fields)、名称、价值和验证这一领域。

之后,在时间的使用上应用程序,我打算延长AR方法__获得和使用的名字作为一个属性。

例如:

如果在我桌meta_fields我有这个价值观:

----------------------------------------------------
| id | name     | value      | validation          |
----------------------------------------------------
| 1  | money_en | $562,00    | some validation...  |
----------------------------------------------------
| 2  | date_crt | 2010-12-09 | some validation...  |
----------------------------------------------------

我打算用我的意见和控制器喜欢它:

$model->money_en //will return $562,00

现在的问题是:

1-我怎么可以使用这种领域存的价值观和恢复它吗?2-我如何用不同的验证种类,以这个领域?因为我储存的验证列为序列的数值上的数据库?

谢谢。

有帮助吗?

解决方案

也许你应该找到一个 EAV 执行?有人创建一个EAV行为对它在YiiExt, 在这里, (我还没有使用)。EAV是复杂和(经常)的一位效率低下的(许多加入了!), 但它的路要走,如果你想有一个任意数量和类型的领域的附加数据库"行".

其他提示

基本上,你需要在这里完成的是一个自定义的ActiveRecord基类。如果你看一下的CActiveRecord,你会看到,它获取各种元数据信息从你选择的数据库。因为在你的情况下,元信息是在一个表中,你需要创建一个自定义的ActiveRecord基类,拉手什么的CActiveRecord一样。

请注意,与像一个自定义元表你描述上面不会是容易做到普通搜索和组操作。

不会的,如果你用一个简单的表ID和值,其中值包含JSON数据会更加容易?

-------------------------------------------------------------------------
| ID | VALUE                                                            |
-------------------------------------------------------------------------
| 10 | {'name':'validation','money_en':'$100','dare_crt' :'2010-12-09'} |
-------------------------------------------------------------------------

和然后是这样的:

$record = MyTable::model()->findByPk(10); // or some thing like this
$arr = CJSON::decode($record->VALUE);
$arr['money_en'] == '$200';
$receord->VALUE = CJSON::encode($arr);
$record->save();

看看这个扩展。它有您所需要的个人资料栏位实行。 http://www.yiiframework.com/extension/yii-user-management

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top