我有一个现有的SQL表,我无法修改它的架构,我想为它创建一个Lithium数据模型。问题是一列包含多个由特殊字符分隔的"字段"。
例如
data = "username|email|age"
我需要:
- 在读取行之后拆分列的值,然后创建"虚拟"属性
- 能够分配给这些虚拟属性
- 在保存之前连接虚拟属性以创建有效的列值
- 为虚拟属性创建验证器
- 使用html->form为虚拟属性创建表单字段
我试着想办法做到这一点,但似乎没有简单的方法。甚至不难:)有什么想法吗?
开箱即用的Lithium不支持魔术虚拟属性。这里有一项正在进行的工作和讨论https://github.com/UnionOfRAD/lithium/pull/569.
也就是说,在保存和查找时,使用Model+过滤器中的实例方法几乎可以解决这个问题。
- 设置
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()来只获取用户名。
这应该可以解决您的问题,直到该功能在锂电池中推出。