laravel-admin 更新數據失敗


 

setFieldOriginalValue出現問題:在使用 laravel-admin 的時候 使用自帶的編輯功能 更新數據 提示更新成功但是數據庫中的數據沒有發生變化

遇到這個情況我首先想到的是會不會是model沒寫好 排查了下 $fillable 里面的值沒毛病 

然后手寫了個ORM 更新數據發現 可以正常使用 這里我們排除 model 的問題

沒辦法只能 一步一步跟代碼排除問題 (這里主要寫解決思路和排查過程 有類似問題的朋友可以直接翻到最后)

這里我是拿出問題的 控制器和之前沒出問題的控制器進行比較來排除問題的

Controller 里面的 form() 這個方法 在edit 時 編輯表單正常顯示 功能正常使用沒有問題

然后我開始排查 Encore\Admin\Form 里面的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

vendor\encore\laravel-admin\src\Controllers\HasResourceActions.php

既然繼承的是他的 update 哪問題有很大可能是在這里

 

這里我們 return $this->form()->update($id);

看到 form() 找了一下沒有找到他里面有form() 這個方法於是 就想到了form() 可能是 所使用控制器中定義的

form() 方法 畢竟所使用的控制器 也是繼承於他的 這個 $this 應該是所使用的控制器

想到就試一下 斷點了一下發現果然還是他 

這里發現我是在編輯的時候 向 form() 傳了兩個值

 

但是在laravel-admin 更新數據時調用是沒有傳值的

所以我在這里寫的條件判斷影響了后面的使用 

取消條件判斷試了下 問題解決 條件判斷在想其他辦法來做好了 總算是把這個問題解決了

之前翻了好久手冊也沒找到相關的說明 或是類似的解決方案

沒找到不能說明手冊中沒有 有哪位朋友在手冊找到相關的說明可以分享下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM