Posted at

[Laravel] 5.4 => 5.5 のバージョンアップでハマった点まとめ


Model


「updated_at」および「created_at」がテーブルに存在しない時に save() でデータ保存しようとするとエラーになる


エラー内容


ArgumentCountError: Too few arguments to function Illuminate\Database\Eloquent\Model::setAttribute(), 1 passed in /home/livede55.com/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php on line 525 and exactly 2 expected


setAttribute() が呼ばれているが引数が足りないよ

と怒られてしまう


原因

updated_at および created_at が存在しないテーブルなのでEloquentの設定は以下にしている

const CREATED_AT = null;

const UPDATED_AT = null;

この状態で何故か 5.5 になると updated_at および created_at に対しての setAttribute() が動作し、

カラム名が null なので 引数エラーが起こる

本家LaravelのGitHubにもIssueが作成されている

https://github.com/laravel/framework/issues/20901


対応

Issueにハックが記載されている対応を行う

public function setUpdatedAt($value)

{
return $this;
}

public function setCreatedAt($value)
{
return $this;
}

setAttribute() 呼び出しされる前提で updated_at および created_at のミューテターを定義してあげる