Laravel Queue: Class setQueue does not exist
LaravelでメールキューイングするとClass setQueue does not existエラーが発生する問題
概要
LaravelでMailable(メール)をキューに投入しようとすると「Class setQueue does not exist」というエラーが発生します。特にPHP 7.3以降で発生しやすい問題です。
エラーメッセージ
ReflectionException: Class setQueue does not exist
Illuminate\Queue\CallQueuedHandler::failed(): Class setQueue does not exist
Error: Class 'setQueue' not found
原因
- Mailableクラスの継承問題:
Queueableトレイトが正しく使用されていない - シリアライズの問題: PHP 7.3でクロージャのシリアライズ方法が変更された
- キャッシュの問題: 古いクラスマップがキャッシュされている
- 名前空間の衝突:
use文の記述ミス
解決策
1. Mailableクラスの正しい定義
| |
2. キャッシュのクリア
| |
3. 古い形式からの移行(Laravel 9以前)
| |
4. キュー接続の確認
| |
5. 明示的にキューを指定
| |
6. Jobとして定義する(代替案)
| |
7. SerializesModelsの確認
| |
デバッグ方法
| |
よくある間違い
ShouldQueueインターフェースを実装しているのにQueueableトレイトを使っていないSerializesModelsを忘れてEloquentモデルをシリアライズしようとする- キャッシュクリア後にキューワーカーを再起動しない
- PHP 7.3以前のコードをそのまま使っている
関連エラー
参考リンク
Laravel の他のエラー
この記事は役に立ちましたか?