今天嘗試使用firstOrCreate去優化一段查找不到即創建的代碼,結果發現會報MassAssignmentException錯誤,提示我參數錯誤,去網上找了好久沒有找到結果,最后慶幸自己解決了,把自己的解決辦法分享給大家。當laravel調用firstOrCreate時其實是相當於一個批量賦值的操作,
但是,在此之前,你需要指定模型的fillable或guarded屬性,因為所有Eloquent模型都通過批量賦值(Mass Assignment)進行保護。
當用戶通過 HTTP 請求傳遞一個不被期望的參數值時就會出現安全隱患,然后該參數以不被期望的方式修改數據庫中的列值。例如,惡意用戶通過 HTTP 請求發送一個is_admin參數,然后該參數映射到模型的create方法,從而允許用戶將自己變成管理員。
所以,你應該在模型中定義哪些屬性是可以進行賦值的,使用模型上的$fillable屬性即可實現。然后在自己的模型里面設置對應的白名單就解決問題了。
