我想创建一个模型,其中有一些属性未存储在数据库中。例如,我想在模型中保留一个“年龄”字段,但我只将生日信息存储在数据库中(一旦加载了DOB信息,我可以计算“年龄”)。我试着给模型扩展添加一个简单的属性,但据我所知,它被CakePHP忽略。完成此任务的正确方法是什么?CakePHP新手问题:如何将非数据库属性添加到模型中?
我是一名CakePHP新手,所以请原谅我,如果我失去了明显的东西。
我想创建一个模型,其中有一些属性未存储在数据库中。例如,我想在模型中保留一个“年龄”字段,但我只将生日信息存储在数据库中(一旦加载了DOB信息,我可以计算“年龄”)。我试着给模型扩展添加一个简单的属性,但据我所知,它被CakePHP忽略。完成此任务的正确方法是什么?CakePHP新手问题:如何将非数据库属性添加到模型中?
我是一名CakePHP新手,所以请原谅我,如果我失去了明显的东西。
我会在模型中使用afterFind回调方法。
自从我处理Cake之后已经有一段时间了,但为什么不只是实现一个getAge()方法呢?
我喜欢这个解决方案。它是明确的并且记录在合乎逻辑的位置。 'afterFind()'当然会起作用,但它隐藏的逻辑比我想要的要多。对于新开发人员来说,“年龄”属性的可用性看起来很神奇。 – 2009-10-05 13:48:11
使用类Cache
:
$parametrs = array('age'=>21, 'name'=>'aziz');
Cache::write('myOptions', $parameters);
Cache::read('myOptions');
如果您正在使用CakePHP 1.3,您可以使用 '虚拟现场': http://book.cakephp.org/view/1608/Virtual-fields [食谱3.7.10]
[编辑]这也在CakePHP 2.x中工作: http://book.cakephp.org/2.0/en/models/virtual-fields.html
此方法的主要优点是将虚拟字段添加到模型中。这样,MVC原则就受到尊重。
例子(MySQL的):
var $virtualFields = array(
'age' => "YEAR(NOW()) - YourModelHere.dob"
);
+1听起来很有希望。只需计算年龄并将其粘贴在某个属性中即可。 – timdev 2009-10-04 18:43:48