升级到Laravel 5.5后,数据加密在Eloquent模型中停止工作


尼拉。
2024-12-30 06:51:32 (2月前)
  1. 求助。与此同时,我尝试过几件事:

在新安装的laravel 5.2和5.4中增加了elocryptfive包装 -

加密
</跨度>
工作正常
在库存laravel 5.5中做了同样的事 - 值

2 条回复
  1. 0# 筱梨 | 2019-08-31 10-32



    再次比较了laravel / framework包中5.4和5.5标签之间的变化,我发现了原因

    getDirty

    的方法

    1. <code>
    2. src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php
    3. </code>
    4. 特征。



    在laravel 5.4中有:




    foreach ($this->attributes as …



    然后在5.5中它被改为:




    foreach ($this->getAttributes() as …





    getAttributes

    方法是解密数据的方法之一,它看起来目前最明智的解决方案是覆盖

    getDirty()

    无论是加密特征还是使用它的应用程序模型。



    修改后的方法如下所示:




    1. public function getDirty()
      {
      $dirty = [];

    2. foreach ($this->attributes as $key => $value) {
    3.     if (! $this->originalIsEquivalent($key, $value)) {
    4.                 $dirty[$key] = $value;
    5.     }
    6. }
    7. return $dirty;
    8. }

    9. </code>

登录 后才能参与评论