laravelでレコード追加機能を実装しデータベース反映まで確認済みだったのですが、諸事情によりidのカラム名を変更後、再度レコード追加しようとした際に今回のエラーが発生しました。
Add ['カラム名'] to fillable property to allow mass assignment on
このエラーはデータベースにデータを保存する時に発生するエラーで、原因はEloquentでMass Assignment
の設定をしていないからのようです。
##Mass Assignment (マス アサインメント)
とは
Webアプリケーションのアクティブなレコードパターンが悪用され、パスワード、許可された権限、または管理者のステータスなど、ユーザーが通常はアクセスを許可すべきでないデータ項目を変更するコンピュータの脆弱性。
Web上から入力されてきた値を制限することで不正なパラメータを防ぐ仕組みになっていて、laravelではMass Assignment
の対策がされていることから今回のエラーが発生しました。
##解決方法
エラーで指摘されたモデルに、下記2つの方法でどちらかを設定することで解決できます。
ホワイトリスト方式:保存したいカラム名を設定
namespace App;
use Illuminate\Database\Eloquent\Model;
class モデル名 extends Model
{
protected $fillable = ['name']; //保存したいカラム名が1つの場合
protected $fillable = ['name','price','number']; //保存したいカラム名が複数の場合
}
ブラックリスト方式:書き込みを禁止したいカラム名を設定
namespace App;
use Illuminate\Database\Eloquent\Model;
class モデル名 extends Model
{
protected $guarded = ['name']; //1つのカラムを書き込み禁止
protected $guarded = ['name','price','number']; //複数のカラムを書き込み禁止
}
私の場合、今回はホワイトリスト方式でレコード追加時の入力項目であるカラムを全て設定したことで解決しました!
参考記事はこちら
https://qiita.com/mutturiprin/items/fd542128355f08727e45
https://nextrevolution.jp/add-to-fillable-property-to-allow-mass-assignment-on/