Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-自定义缓存属性(getter?)_Php_Laravel_Caching - Fatal编程技术网

Php Laravel-自定义缓存属性(getter?)

Php Laravel-自定义缓存属性(getter?),php,laravel,caching,Php,Laravel,Caching,我只是不明白如何在不干扰数据库中的模型属性的情况下以“laravel方式”完成下面的示例所描述的内容 说清楚,我正在寻找一些核心的Laravel魔法,这样我就不需要手动执行$memoryCache操作了 假设getProp()方法是一个我不想多次运行的数据库调用,即在PHP运行完成之前将结果保存在内存中 示例类: namespace-App\Models; 使用Illumb\Database\Elount\Model; 类测试扩展了模型 { public$memoryCache=[]; 公共职能

我只是不明白如何在不干扰数据库中的模型属性的情况下以“laravel方式”完成下面的示例所描述的内容

说清楚,我正在寻找一些核心的Laravel魔法,这样我就不需要手动执行
$memoryCache
操作了

假设
getProp()
方法是一个我不想多次运行的数据库调用,即在PHP运行完成之前将结果保存在内存中

示例类:

namespace-App\Models;
使用Illumb\Database\Elount\Model;
类测试扩展了模型
{
public$memoryCache=[];
公共职能{
返回$this->getProp();
}
公共职能建议{
返回$this->getProp();
}
私有函数getProp(){
如果(!array_key_存在('prop',$this->memoryCache)){
echo“仅执行一次\n”;
$this->memoryCache['prop']='DBData_uu'.rand(1,5);
}
返回$this->memoryCache['prop'];
}
}
运行它:

$test=new\App\Models\test;
回显“{$test->propA()}\n”;
回显“{$test->propB()}\n”;
输出:

Do this only once
DBData_5_A
DBData_5_B
奖金

如果我能以某种方式使用PHP getter/setter,这样我就可以像类“properties”那样调用它们,那就更好了:

$test=new\App\Models\test;
回显“{$test->propA}\n”;
回显“{$test->propB}\n”;

任何地方都没有任何内置的东西可以使用,你所做的一切都很好;这与Eloquent在使用关系的dynamic属性时执行的检查类型相同。它检查是否已加载,如果未加载,则返回加载的关系(保存在实例上,以相同类型的方式缓存)

“奖金”部分:

如果您想将这些作为属性而不是方法访问,可以使用“访问器”进行访问:

现在,您可以访问模型的
propA
属性:

$model->propA;

您可以将它们作为属性访问,它们被称为访问器,可能您应该看看@lagbox我知道关于访问器的内容,但是a)它们正在转换db属性,B)它们不缓存结果,这是主要问题here@Fractalf不,你必须写代码才能做到,您可以使用实际的缓存系统,但这对于只有该对象生命周期的对象来说是毫无意义的。当使用dynamic属性时,即使eloquent本身也必须执行相同类型的关系检查。。。如果没有加载它,它会尝试加载它并缓存结果,相同类型的检查也会发生,但不会缓存。查看问题中的注释您不需要缓存对访问者的调用。。。对
getProp
的调用是缓存的,如果不是这种情况,那么您的示例就没有任何意义,因为在这些方法中,您都在调用
getProp
,这与这里发生的情况相同
getProp
正在大笑谢谢你回答我部分问题:)
$model->propA;