談談我第一次如何為 Laravel 貢獻原始碼

WaitMoonMan發表於2018-05-28

起源

  • 辦法總比困難多,所以發現問題比解決問題更難得到。
  • 事情的起源是因為在除錯一段模型事件時出現的,當時隨便往資料庫裡插入了一段字串 ID,而不是標準的 uuid。然後發現我的模型事件中查詢不到當前 ID 的模型。
  • 當然,我們不可能總是能遇到問題,也有可能遇到了問題是自己的錯誤,這時候可以去Laravel問題庫看一下自己有什麼能解決的問題

進展

  • 先排除了自己本身程式碼中的錯誤,然後一步一步除錯
    談談我第一次如何為 Laravel 貢獻原始碼
    談談我第一次如何為 Laravel 貢獻原始碼
    談談我第一次如何為 Laravel 貢獻原始碼
  • 列印了一下返回變數,發現belongsToMany::sync方法返回的 ID 並不正確。
    談談我第一次如何為 Laravel 貢獻原始碼
  • 進一步檢視,這個整數大小,很熟悉,覺得應該是整數型別大小溢位了。然後看了一下原始碼InteractsWithPivotTable::caseKey
    談談我第一次如何為 Laravel 貢獻原始碼
  • 基本確定就是整形數字溢位了,這裡只是簡單的根據變數型別進行強轉,因為 PHP 是弱型別語言,所以當長字元是一個數字字串時,將導致無法得到正確的結果。
  • 但我在模型中已經設定了主鍵型別為字串,這不應該是我想要的結果。
    談談我第一次如何為 Laravel 貢獻原始碼
  • 然後我向框架提了一個issues
  • Laravel 的組織成員tillkruss 告訴我可以提交一個 PR
  • 然後自己馬上行動起來,說實話解決這個問題很簡單,因為只要獲取主鍵型別,然後進行強轉即可
  • 馬上提交了程式碼,之後被駁回,原來是忘記了寫測試程式碼
  • 檢視了一下其他資料庫的測試程式碼,找了一個比較符合我的寫了一個資料庫的測試。提交。成功合併。
  • 具體修改的程式碼,可以檢視這裡 5.7 Improve the return value of the caseKey method

結束

  • 第一次為大型專案提交PR,確實感覺到不能這麼隨意。
  • 寫程式碼的時候請明確解釋這段程式碼的原因,你會發現框架當中很多很多的註釋
  • 千萬不要忘記寫測試檔案
  • 當你提交PR的時候,請詳細描述你本次做了什麼改動,增加了什麼新功能。
  • 盡情的表達你的想法,社群有很多人會幫助你的 最後歡迎加入Laravel學習交流群,群號:584453488

相關文章