0

我有一个无法修改其架构的现有 SQL 表,我想为其创建一个锂数据模型。问题是一列包含多个由特殊字符分隔的“字段”。

例如

data = "username|email|age"

我需要:

  • 读取行后拆分列的值,并创建“虚拟”属性
  • 能够分配给这些虚拟属性
  • 在保存之前加入虚拟属性以创建有效的列值
  • 为虚拟属性创建验证器
  • 使用 html->form 为虚拟属性创建表单字段

我试图弄清楚如何做到这一点,但似乎没有简单的方法。甚至不是一个艰难的方式:) 有什么想法吗?

4

1 回答 1

1

开箱即用的 Lithium 不支持魔术虚拟属性。这里有一个正在进行的工作和讨论https://github.com/UnionOfRAD/lithium/pull/569

也就是说,您几乎可以在保存和查找时使用模型 + 过滤器中的实例方法解决这个问题。

  • 一个 after find 过滤器,它在读取实体后设置usernameemail和属性。age
  • data保存前过滤器,在保存实体之前将这些属性连接到一个属性中,并取消设置username,emailage(以避免保存它们)。

也许你也需要模型实例方法

public function username($entity) {
      /* split here $entity->data by "|" and keep only what do you want */
      return $username;
}

然后你可以在任何地方调用 $user->username() 来获取用户名。

这应该可以解决您的问题,直到此功能将在 Lithium 中提供。

于 2012-07-30T11:30:29.810 回答