エラーの背景
共同開発をしている時に以下のようなエラーが出ました。
自分の環境だけこのエラーが発生して他のメンバーはエラーが出ていませんでした。
原因がわからなすぎて2,3日詰まってしまいました。その間に他のタスクを進めることができましたが、
かなり苦戦しました。
原因と解決方法
原因は自分がユーザー退会機能を作っていた時、ユーザーが投稿したものを退会と同時に削除する機能がなかったことが原因だったみたいです。
まず解決した方法は以下のコマンドです。一旦エラーは治りました。
php artisan migrate:fresh --seed
DB内のすべてのテーブルを削除し、新しいテーブルを作成して、マイグレーションファイルで定義された
すべてのテーブルとカラムを作成し、データベースにテストデータを挿入するためのSeederファイルを実行するコマンドです。つまり、データベースの完全な再構築と初期化を行うためのコマンド
です。
より不整合を減らしながらデータ投入をできますが、全テーブルdropするので、気をつけてください
。
そしてユーザー退会機能のユーザーが退会と同時に投稿も削除する機能を実装したら解決しました。
protected $dates = [
'deleted_at'
];
public function posts()
{
return $this->hasMany(Posts::class);
}
public static function boot()
{
parent::boot();
static::deleting(function ($user) {
$user->posts()->delete();
});
}
根本的な解決
このエラーが出た時はユーザーの退会機能を実装していた時でした。
ユーザーが何か投稿した時に同時に投稿した内容も削除される機能でしたが、
投稿したものも削除されていなかったのが原因みたいでした。
protected $dates = [
'deleted_at'
];
#省略
public static function boot()
{
parent::boot();
static::deleting(function ($user) {
$user->posts()->delete();
});
}
これを実装したら解決しました。
個人によって環境は違うので参考までに!
資料