LaravelでEloquentを使ってデータを更新しようとしたら”Column ‘updated_at’ in field list is ambiguous”

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()]);

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください