我有一个无法修改其架构的现有 SQL 表,我想为其创建一个锂数据模型。问题是一列包含多个由特殊字符分隔的“字段”。
例如
data = "username|email|age"
我需要:
- 读取行后拆分列的值,并创建“虚拟”属性
- 能够分配给这些虚拟属性
- 在保存之前加入虚拟属性以创建有效的列值
- 为虚拟属性创建验证器
- 使用 html->form 为虚拟属性创建表单字段
我试图弄清楚如何做到这一点,但似乎没有简单的方法。甚至不是一个艰难的方式:) 有什么想法吗?
开箱即用的 Lithium 不支持魔术虚拟属性。这里有一个正在进行的工作和讨论https://github.com/UnionOfRAD/lithium/pull/569。
也就是说,您几乎可以在保存和查找时使用模型 + 过滤器中的实例方法解决这个问题。
username
、email
和属性。age
data
保存前过滤器,在保存实体之前将这些属性连接到一个属性中,并取消设置username
,email
和age
(以避免保存它们)。也许你也需要模型实例方法
public function username($entity) {
/* split here $entity->data by "|" and keep only what do you want */
return $username;
}
然后你可以在任何地方调用 $user->username() 来获取用户名。
这应该可以解决您的问题,直到此功能将在 Lithium 中提供。