zoukankan      html  css  js  c++  java
  • 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 更新数据时调用是没有传值的

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

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

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

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

  • 相关阅读:
    c# 委托
    datagrid加下拉列表dropdownlist
    MySQL存储过程的基本函数(三)
    MySQL存储过程详解 mysql 存储过程(二)
    MySQL存储过程(一)
    SFTP 文件上传下载引用代码
    JAVA SFTP文件上传、下载及批量下载
    java中遍历MAP的几种方法
    POSTGRESQL 导入导出
    db2move 数据导出整理
  • 原文地址:https://www.cnblogs.com/y734290209/p/11330319.html
Copyright © 2011-2022 走看看