Kyomachi-blog

record of fighting:PHP/Laravel , HTML/CSS , Javascript etc

Laravel|MassAssignmentException エラーへの対処法

f:id:kyomachiya:20190116183346p:plain

こんにちは、京町啓一です。

今回は MassAssignmentException エラーへの対処法 についてです。

エラー発生時のコード

// tinker

App\Message::first()->update(['content' => 'guarded'])

messages テーブルの content カラムの内容を guarded へ変更しようとしたときに、MassAssignmentException エラーが発生しました。

エラー内容

// tinker

Illuminate/Database/Eloquent/MassAssignmentException with message 'content'

対処法

モデルファイルに変更許可を記述する

モデルファイルに変更許可を施す方法は、2つあります。

1.ブラックリスト方式

 変更を許可しないカラムを指定します。

 こちらの手法の方が記述が少なくて済む場合が多いかと思います。

 今回の私のエラーへの対処法としての記述例を挙げておきます。

 ('id' だけを変更させないための記述です)

// app/Message.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Message extends Model

{
    protected $guarded = ['id'];
}


2.ホワイトリスト

 変更を許可するカラムを指定する方法です。

 今回の私のエラーへの対処法としての記述例を挙げておきます。

 ('content' だけに変更を許可するための記述です)

// tinker

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Message extends Model

{
    protected $fillable = ['content'];
}


tinker を再起動する

tinker を利用中だった場合は、exit で tinker から抜けましょう。

再度、php artisan tinker でtinker を起動しましょう。

カラム内容の変更を再度実行する

// tinker

App\Message::first()->update(['content' => 'guarded'])


true と出れば成功