Laravel5.5でEloquentを使ってデータベースを更新しようとしたら”Column ‘updated_at’ in field list is ambiguous”エラーが発生した。
User::query()
->join('contacts', 'users.id', '=', 'contacts.user_id')
->update([...]);
Integrity constraint violation: 1052 Column ‘updated_at’ in field list is ambiguous
usersテーブルとcontactsテーブルの両方にupdated_atフィールドが存在するため、
どちらのテーブルのupdated_atフィールドを更新していいかわからず、エラーになっている。
対策としては、\Illuminate\Database\Eloquent\Builderのupdate()ではなく、
\Illuminate\Database\Query\Builderのupdate()を使用すれば良い。
具体的には、\Illuminate\Database\Eloquent\BuilderのgetQuery()で
\Illuminate\Database\Query\Builderを取得してからupdate()を実行する。
注意点としては、\Illuminate\Database\Query\Builderのupdate()を使用すると、
updated_atフィールドが更新されないので、明示的に更新する必要がある。
User::query()
->join('contacts', 'users.id', '=', 'contacts.user_id')
->getQuery()
->update([..., 'users.updated_at' => Carbon::now()]);