起源
- 辦法總比困難多,所以發現問題比解決問題更難得到。
- 事情的起源是因為在除錯一段模型事件時出現的,當時隨便往資料庫裡插入了一段字串
ID
,而不是標準的uuid
。然後發現我的模型事件中查詢不到當前ID
的模型。 - 當然,我們不可能總是能遇到問題,也有可能遇到了問題是自己的錯誤,這時候可以去Laravel的問題庫看一下自己有什麼能解決的問題
進展
- 先排除了自己本身程式碼中的錯誤,然後一步一步除錯
- 列印了一下返回變數,發現
belongsToMany::sync
方法返回的ID
並不正確。 - 進一步檢視,這個整數大小,很熟悉,覺得應該是整數型別大小溢位了。然後看了一下原始碼
InteractsWithPivotTable::caseKey
- 基本確定就是整形數字溢位了,這裡只是簡單的根據變數型別進行強轉,因為
PHP
是弱型別語言,所以當長字元是一個數字字串時,將導致無法得到正確的結果。 - 但我在模型中已經設定了主鍵型別為字串,這不應該是我想要的結果。
- 然後我向框架提了一個issues
Laravel
的組織成員tillkruss 告訴我可以提交一個PR
- 然後自己馬上行動起來,說實話解決這個問題很簡單,因為只要獲取主鍵型別,然後進行強轉即可
- 馬上提交了程式碼,之後被駁回,原來是忘記了寫測試程式碼
- 檢視了一下其他資料庫的測試程式碼,找了一個比較符合我的寫了一個資料庫的測試。提交。成功合併。
- 具體修改的程式碼,可以檢視這裡 5.7 Improve the return value of the caseKey method
結束
- 第一次為大型專案提交PR,確實感覺到不能這麼隨意。
- 寫程式碼的時候請明確解釋這段程式碼的原因,你會發現框架當中很多很多的註釋
- 千萬不要忘記寫測試檔案
- 當你提交PR的時候,請詳細描述你本次做了什麼改動,增加了什麼新功能。
- 盡情的表達你的想法,社群有很多人會幫助你的
最後
歡迎加入Laravel學習交流群,群號:584453488