一个关于orm / 动态属性的问题
$sample是一个orm对象
模型中定义了getProgressAttribute方法,其中使用了status属性 默认的类型是数字
然后执行到第二行progress获取到的值是0.22
待第三行执行后,status变成了数字对应的文字,可同时,progress变成了0..
这是怎么回事?laravel的一种机制??属性有更改时重新计算与之关联的属性??
对了 还有getSweetStatusAttribute方法如图 只是把staus id编号对应的名称返回而已
3 Comments
$sample->process 是动态属性 每次都是动态计算的
也就是说status更改的时候 progress也动态更新了
嗯 要反过来看 不管你有没有更改 status 每次访问 proccess 属性都会执行
getProcessAttribute
方法来计算 只是status更改了process 的值会变而已 对于复杂的逻辑不建议使用这种访问器的方式来获取 对性能有损耗 而且会在复杂处理中导致值被污染 出现bug也不便排查