一个关于orm / 动态属性的问题

049b72e7fbc1920128371435d224f755.png

$sample是一个orm对象

模型中定义了getProgressAttribute方法,其中使用了status属性 默认的类型是数字

4005384db0ba5ca11310aba9202f3148.png


然后执行到第二行progress获取到的值是0.22  

待第三行执行后,status变成了数字对应的文字,可同时,progress变成了0..

这是怎么回事?laravel的一种机制??属性有更改时重新计算与之关联的属性??

对了 还有getSweetStatusAttribute方法如图 只是把staus id编号对应的名称返回而已

2d26d3a543d9b946f37843d60e077395.png



3 条回复

  1. 学院君 学院君 says:
    @ lukez

    嗯 要反过来看 不管你有没有更改 status 每次访问 proccess 属性都会执行 getProcessAttribute 方法来计算 只是status更改了process 的值会变而已 对于复杂的逻辑不建议使用这种访问器的方式来获取 对性能有损耗 而且会在复杂处理中导致值被污染 出现bug也不便排查

登录后才能进行评论,立即登录?