Edited at

【Laravel:Eloquentクラス】fillableとguardedの指定はどちらかだけでいい

More than 3 years have passed since last update.

insertやcreateメソッドでテーブルのカラムに値を挿入する事ができます。

そのような複数代入をする際に、予期せぬ代入が起こることを防ぐために、

モデルへfillableguardedを設定する必要があります。


「予期せぬ代入」って?

複数代入による予期せぬ代入とは、製作者が意図していない代入のことです。

ユーザーから変えてほしくない値(例えばidや管理者権限を管理するカラムなど)

を自由に変えることができてしまったら困ってしまいますよね😭😭😭 事件になります。

入力によって変動する値を安全に管理するために、以下の指定が必要となります。


【方法】fillableとguardedの設定

$fillable - ホワイトリスト_複数代入時に代入を許可する属性を配列で設定

protected $fillable = ['name', 'age', 'updated_at'];

$guarded - ブラックリスト_複数代入時に代入を許可しない属性を配列で設定

protected $guarded = ['id'];

Eloquentクラスにて上記の設定を行うことで、複数代入における許可設定が可能となります。


【注意】fillableとguardedの指定はどちらかだけでいい

fillableとguardedの設定はどちらか一方のみで大丈夫です

これらの両者の属性を両方同時に設定することはできません!

注意です。

このように設定方法は二種の設定方法があります。

コードの可読性を意識して状況ごとに使い分けましょう!!

ドキュメントにも記述してありましたが、こちらの文面のみではあまり理解がしづらい部分が個人的にあったため今回まとめさせていただきました。

参考:Laravel5.1 Eloquent https://readouble.com/laravel/5/1/ja/eloquent.html