1. ホーム
  2. php

[解決済み] Laravelにおける「Mass Assignment」の意味とは?

2022-04-23 11:40:14

質問

LaravelのドキュメントでEloquent ORMのトピック部分を見ていたら、新しい用語 "Mass Assignment" が出てきたのですが、これは何ですか?

ドキュメントでは、マスアサインメントを行う方法と $fillable または $guarded プロパティを設定します。しかし、それをやった後では、「大量割り当て」とそれがどのように機能するのかを明確に理解することはできませんでした。

CodeIgniterの過去の経験では、この用語は聞いたことがありませんでした。

どなたかわかりやすい説明をお持ちの方はいらっしゃいますか?

どのように解決するのですか?

大量代入とは、モデル作成時に配列を送ることです。基本的に、モデル上のフィールドを一つ一つ設定するのではなく、一度にまとめて設定するようなものです。

$user = new User(request()->all());

(これは、モデル上の各値を個別に明示的に設定する代わりに)

を使用することができます。 fillable で、実際に更新を許可するフィールドを保護します。

また、このようにすることで、すべてのフィールドをマスアサインメントできないようにすることができます。

protected $guarded = ['*'];

例えば、ユーザー・テーブルに user_type で、その値は user / admin です。

明らかに、ユーザーがこの値を更新できないようにしたいのです。理論的には、上記のコードを使用すると、誰かがフォームに新しいフィールド user_type を送信し、他のフォームデータと一緒に'admin'を送信すると、簡単に自分のアカウントを管理者アカウントに切り替えることができます...悪い知らせです。

追加することで

$fillable = ['name', 'password', 'email'];

を使用して、それらの値のみが更新できるようにしているのです。 mass assignment

を更新できるようにするために user_type の値は、このように明示的にモデルに設定し、保存する必要があります。

$user->user_type = 'admin';
$user->save();