環境
Laravel v9.5.1 (PHP v8.1.3)
状況
Articleをcreateするとき下記のエラー
Add ['title'] to fillable property to allow mass assignment on
app/Models/Article.php
class Article extends Model
{
use HasFactory;
public function comments()
{
return $this->hasMany(Comment::class);
}
public function user()
{
return $this->belongsTo(User::class, 'user_id');
}
public function likes()
{
return $this->hasMany(Like::class);
}
}
原因
modelにprotected $fillable
を定義してないから。
ただし、createメソッドを使用する前に、モデルクラスでfillableまたはguardedプロパティを指定する必要があります。すべてのEloquentモデルはデフォルトで複数代入の脆弱性から保護されているため、こうしたプロパティが必須になります。
解決方法
app/Models/Article.php
class Article extends Model
{
use HasFactory;
#追記
protected $fillable = [
'title',
'content',
'user_id'
];
public function comments()
{
return $this->hasMany(Comment::class);
}
public function user()
{
return $this->belongsTo(User::class, 'user_id');
}
public function likes()
{
return $this->hasMany(Like::class);
}
}
Railsでいうと
Mass Assignment脆弱性の対策として
Laravel -> modelに$fillableを設定
Rails -> controllerにストロングパラメータを設定
ということかなと。
Railsから入ったのでその違いがわかるのが楽しい。