Laravel Eloquent の”fillable”の設定がめんどくさいときは”guarded”が便利

takahashi 著者:takahashi

Laravel Eloquent の”fillable”の設定がめんどくさいときは”guarded”が便利

PHPフレームワークのLaravelには、DBと接続してデータをやり取りする仕組みとして”Eloquent”が実装されています。

Eloquentを使用すると、 基本的なDB操作であれば始めからメソッドが用意されているため、Modelに自分でメソッドを書かなくても簡単にデータが取得、保存ができるためとても便利です。

ただし、上記の備え付けのメソッドを使用する際は、DBの設定(テーブル名や主キーなど)をModelに記述する必要があります。

この設定の一つに、どのテーブルへのアクセスを許可するか、という指定があります。

この指定を行っておくことで、本来データを入れてはいけないテーブルに対して、誤ってModelからアクセスしてしまうことを防ぐことができます。

必須の項目なので、何らかの指定は必要になります。

個人的によくサイトで見かける方法で、Model内のクラスのブロックの頭に$fillableという変数を置くものがあります。

class Hoge extends Model {
    ....
    protected $fillable = ['user_name','mail_address','password'];
    ....

fillableでは何を指定すればいいのかというと、”Laravel側から触ってもよいカラム”を指定します。

これでも動作としては問題がないのですが、カラム数の多いテーブルなどが多かったりすると、正直めんどくさくなってきます…

実はもう一つ、操作可能なカラムを指定する方法があります。

$guarded 変数を用いる方法です。

class Hoge extends Model {
    ....
    protected $guarded = ['id'];
    ....

違いとして、fillableが所謂ホワイトリスト方式なのに対し、 guarded はブラックリスト方式です。

つまり、 guarded を指定した場合は”アクセスしてはいけない”カラムだけ記述すればOKです。

アクセスしてはいけないカラムが、アクセス可能なカラムよりも数が少ない場合はこちらの方が楽ですね。

LaravelのModelでは、fillableかguardedのいずれかが指定されていればOKとなっていますので、うまく使い分けて記述量を減らしていきましょう。

  • この記事いいね! (0)

著者について

takahashi

takahashi administrator

Webエンジニア。 趣味で自宅サーバーを稼働中。 ファンタジーが好き。