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 更新数据时调用是没有传值的

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

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

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

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

  • 相关阅读:
    手把手教你使用Python生成图灵智能小伙伴,实现工作助手/闲聊功能
    键盘侠Linux教程 | Linux运维工程师
    键盘侠Linux干货| ELK(Elasticsearch + Logstash + Kibana) 搭建教程
    键盘侠Linux教程(六)| 正则表达式与通配符
    键盘侠Linux干货| 使用SSH方式推送文件至github仓库
    键盘侠Linux干货| 使用Nginx创建一个私人网盘
    键盘侠Linux教程(五)| 基本权限管理
    键盘侠Linux教程(四)| 常用命令
    键盘侠Linux教程(一)|初学者建议
    键盘侠Linux教程(三)| Linux安装
  • 原文地址:https://www.cnblogs.com/y734290209/p/11330319.html
Copyright © 2011-2022 走看看