Laravelの「Fillable」と「Guarded」の違いって?-DEVコミュニティ

Laravelの「Fillable」と「Guarded」の違いのカバー画像

Laravelでは、$fillable$guarded属性の大量割り当て を制御するためにEloquentモデルで使われる属性です。
Laravelにおける 大量割り当て とは、データの配列を使って、モデルの複数の属性を一度に設定する能力のことです。

Fillable :


$fillableは、大量割り当てが可能な属性を指定する配列です。これらは createupdate メソッドを使用してセットできる属性です。
fillableの配列に含まれていない属性は、大量割り当て時に無視されます。

class YourModele extends Model
{
        protected $fillable = [
        'name',
        'email',
        'password',
    ];
}

この例では$name, $email, $passwordが大量割り当てされます。

もしモデルの全ての属性を大量割り当て可能にしたい場合、$fillable宣言でワイルドカードの*を使うことができます。しかし、この方法のセキュリティ上の意味を理解することが重要です。

class YourModele extends Model
{
    protected $fillable = ['*'];
}

Guarded :


$guardedも配列ですが、逆の働きをします。大量割り当てが許されない属性を指定します。guarded配列に含まれていない属性は、大量割り当てに安全とみなされます。

class YourModele extends Model
{
        protected $guarded = [
        'name',
        'email',
        'password',
    ];
}

この例では、

$name, $email, $password

が大量割り当てされません。

モデルの全ての属性を大量割り当てしたくない場合、$guarded宣言でワイルドカードの*を使うことができます。

class YourModele extends Model
{
    protected $guarded = ['*'];
}

主な違い


$fillable$guarded主な違い は、大量割り当て可能な属性を定義するアプローチです。$fillableは許可された属性を明示的に述べ、$guardedは許可されない属性を明示的に述べます。

$fillable$guardedを使うことの重要性


$fillable$guardedを使うことが重要なのは、大量割り当ての脆弱性に対する保護のためであり、セキュリティリスクにつながる可能性があるからです。許可されるか、または許可されない属性を指定することで、モデルに割り当てられるデータをよりコントロールできます。

こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/kepsondiaz/fillable-guarded-in-laravel-whats-the-difference-589j