有没有办法缓存虚字段?我是说自动地,用它们所属的实体,因为我知道,即使从缓存中检索到实体,虚字段也会在需要时生成。
显然我知道我可以亲自处理,所以(例子):
protected function _getFullName()
{
$fullName = Cache::read('full_name_for_' . $this->_properties['id'], 'users');
if (empty($fullName)) {
$fullName = $this->_properties['first_name'] . ' ' . $this->_properties['last_name'];
Cache::write('full_name_for_' . $this->_properties['id'], $fullName, 'users');
}
return $fullName;
}
但是我想知道CakePHP是否可以直接完成。
编辑
背景。Post
实体具有text
属性。text
可以包含图像(作为html代码),甚至是远程的。现在我必须将文本中包含的第一个图像的url及其大小存储在某个地方。因此我创建了first_image
虚拟字段,它使用正则表达式。问题在于图像大小:我不能做到每次都运行getimagesize()
函数,特别是如果是远程映像,原因大家很容易理解。那么怎么办呢?
2条答案
按热度按时间b4lqfgs41#
有没有办法缓存虚字段?
没有。
您所做的事情没有多大意义,在这种情况下,缓存肯定会导致比您从中获得的任何东西更多的开销。
在DB级别使用concat()来连接名称。
此外,如果真实的的需要缓存虚拟财产,那么我会说体系结构中明显出了问题。
wr98u20j2#
对于我来说,希望防止访问器/虚字段中的代码在同一个请求中执行多次是有意义的,如果在脚本中的多个位置使用它们,则很容易发生这种情况。
你可以这样做,但我不完全确定它是否符合犹太教规:
我想可能有更好的方法来做这件事。食谱中有提到这类事情:
每次引用字段时,都会执行访问器中的代码。如果在访问器中执行资源密集型操作,则可以使用局部变量来缓存代码,如下所示:$我的实体属性= $实体-〉我的属性。
有人有幸实现了这个吗?