2011-12-19 70 views
2

我来自.net背景,因此我在锂中看到的空类(模型)令人不安。
在.NET中,我没有财产,除非我做这样的事情:模型属性是动态的

public class MyClass() 
    public property myProp as string 
end class 

,然后我设置或获取像这样的属性:

dim aClass as myClass 
aClass.myProp = "some string" 
dim myString as String = aClass.myProp 

我所看到的锂是JavaScript的动态对象。
我可以声明一个任意对象并随着我去添加属性。 现在,我并不是说这是一件坏事,我只是想知道:

  1. 如果这是正常的PHP或正常的锂电池和
  2. 如果我添加属性(这样我就可以得到eclipse中的代码完成),会伤害到Lithium的ORM特性吗?
+0

无论何时向数据库添加字段,都无需修改代码! – psparrow 2011-12-19 16:24:35

回答

3

锂是相当先进的,并利用了许多框架没有的一些PHP功能。您可以直接向PHP中的对象添加属性,但是在使用框架时,您需要查看最佳实践以及它将如何影响您的应用程序。

在锂中,MyModel::create()MyModel::find()返回表示数据库记录或文档的实体对象或实体对象的集合。

实体属性存储在受保护的$_updated$_data数组中,并通过__get__set方法访问。

所以,当你参考$myModel->title,你会得到/设置$myModel->_updated['title']

然后,当您拨打$myModel->save()时,$_updated中的数据将被保存到数据库记录或文档中。

有关更多详细信息,请参见https://github.com/UnionOfRAD/lithium/blob/master/data/Entity.php

+0

所以这意味着它是一个锂的东西,并在实际属性编码是一件坏事? (再次,只是对代码完成感到兴奋,如果它不是一个好主意,在属性中编码,我不擅长) – 2011-12-19 16:28:52

+0

对。处理实体数据时,您会希望远离它。享受与锂的合作! – psparrow 2011-12-19 16:33:03

+0

你不明确地这样说,但我认为添加属性会缩短Lithium所做的映射;您的更改不会进入'$ _updated'数组,并且不会保存到数据库。因此手动添加属性实际上会导致问题。 – benzado 2011-12-19 19:51:09