LoginSignup
24
21

More than 3 years have passed since last update.

Add [ ] to fillable property to allow mass assignment onの解決方法

Last updated at Posted at 2021-04-14

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/

24
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
21