laravel-admin 更新数据失败

setFieldOriginalValue出现问题:在使用 laravel-admin 的时候 使用自带的编辑功能 更新数据 提示更新成功但是数据库中的数据没有发生变化

遇到这个情况我首先想到的是会不会是model没写好 排查了下 $fillable 里面的值没毛病 

然后手写了个ORM 更新数据发现 可以正常使用 这里我们排除 model 的问题

没办法只能 一步一步跟代码排除问题 (这里主要写解决思路和排查过程 有类似问题的朋友可以直接翻到最后)

这里我是拿出问题的 控制器和之前没出问题的控制器进行比较来排除问题的

Controller 里面的 form() 这个方法 在edit 时 编辑表单正常显示 功能正常使用没有问题

然后我开始排查 EncoreAdminForm 里面的update 方法 在474行 左右

这里发现两个控制器获取到的值相同 也没有问题 直到

494行 

$this->setFieldOriginalValue();时发现

$this->builder->fields()->each

这里 each 这个函数是作为遍历使用的 我打印了下$this->builder->fields() 的值

发现两个已经有区别了

正常的控制器中 有个 Collection 对象

而异常的控制器中 什么都没有

这里我找到 Collection 实在 $this->builder 这个对象被 __construct 时放入的  builder对象是在 form 被 __construct 放入的 这里我在

form 的 __construct 方法中 打印了一下 发现两个控制器的结果值是相同的 

然后一步一步排查 发现并没有什么用 然而还是没有找到 Collection 这个对象是在哪被放入的 

就想起来排查下 HasResourceActions

vendorencorelaravel-adminsrcControllersHasResourceActions.php

既然继承的是他的 update 哪问题有很大可能是在这里

这里我们 return $this->form()->update($id);

看到 form() 找了一下没有找到他里面有form() 这个方法于是 就想到了form() 可能是 所使用控制器中定义的

form() 方法 毕竟所使用的控制器 也是继承于他的 这个 $this 应该是所使用的控制器

想到就试一下 断点了一下发现果然还是他 

这里发现我是在编辑的时候 向 form() 传了两个值

但是在laravel-admin 更新数据时调用是没有传值的

所以我在这里写的条件判断影响了后面的使用 

取消条件判断试了下 问题解决 条件判断在想其他办法来做好了 总算是把这个问题解决了

之前翻了好久手册也没找到相关的说明 或是类似的解决方案

没找到不能说明手册中没有 有哪位朋友在手册找到相关的说明可以分享下

原文地址:https://www.cnblogs.com/y734290209/p/11330319.html