エラー内容
Laravel で データベースに登録するときに、下記のエラーが発生する場合があります。
1 |
Add [カラム名] to fillable property to allow mass assignment on [App\Models\Xxxxxx]. {"exception":"[object] (Illuminate\\Database\\Eloquent\\MassAssignmentException(code: 0): Add [カラム名] to fillable property to allow mass assignment on [App\\Models\\Xxxxxx]. at /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:524) |
このエラー原因としては、EloquentでMass Assignmentが未設定となっているためです。
Mass Assignment (マス アサインメント)とは
Webアプリケーションのアクティブなレコードパターンが悪用され、パスワード、許可された権限、または管理者のステータスなど、ユーザーが通常はアクセスを許可すべきでないデータ項目を変更するコンピュータの脆弱性のことです。
Web上から入力されてきた値を制限することで不正なパラメータを防ぐ仕組みです。
LaravelではMass Assignmentの対策がされているので、未設定の場合には、今回のようなエラーが発生します。
解決方法
エラーで指摘されたモデルに、下記2つの方法でどちらかを設定することで解決できます。
ホワイトリスト方式:保存したいカラム名を設定
1 2 3 4 5 6 7 8 9 |
namespace App; use Illuminate\Database\Eloquent\Model; class モデル名 extends Model { protected $fillable = ['name']; //保存したいカラム名が1つの場合 protected $fillable = ['name','price','number']; //保存したいカラム名が複数の場合 } |
ブラックリスト方式:書き込みを禁止したいカラム名を設定
1 2 3 4 5 6 7 8 9 |
namespace App; use Illuminate\Database\Eloquent\Model; class モデル名 extends Model { protected $guarded = ['name']; //1つのカラムを書き込み禁止 protected $guarded = ['name','price','number']; //複数のカラムを書き込み禁止 } |