【Laravel】General error: 1 no such column: ${table_name}.

とあるLaravel 11のプロジェクトで、下記のエラーが発生した。

Next Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1 no such column: email_activation_tokens. (Connection: sqlite, SQL: select * from "email_activation_tokens" where "email_activation_tokens"."" is null limit 1) in /home/laravel/app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:822

このエラーは、Laravelのよくあるようなメール送信機能を実装していて、メール送信を非同期で行うために処理をジョブ化して、メール送信をキュー処理できるようにしていて、それをPHPUnit経由で実行した際に上記のエラーが発生したという次第である。

エラーの内容としては、存在しないカラムを参照している事が問題との事だが、自分で書いたコードで該当するカラムを参照しようとする箇所は無いので、Laravel側のコードのどこかで何かが起こっているのだろうという感じ。

関係している処理を一通り調べたところ、メール送信のためのジョブにEloquentのインスタンスを保持させようとすると、このエラーが発生している事が分かった。

General error: 1 no such column: email_activation_tokens.

というエラーであるが、email_activation_tokensというのはテーブル名であり、カラムとして参照とするコードは一切ないので、Laravel側のどこかで問題が発生しているようだ。

ちなみにモデルのフィールドを下記のようにすると、エラーが発生するようになって、下記のフィールドを消してしまえば正常に動くのだが、テーブルの設計の関係で下記のようにする必要がある。

protected $primaryKey = null;

public $incrementing = false;

const UPDATED_AT = null;

そのため、ジョブにEloquentのインスタンスを渡すのではなく、toArrayメソッドでモデルの情報を配列にしてみると、エラーは発生しなくなった。

コメント

コメントを残す

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