環境
Laravel v9.5.1 (PHP v8.1.3)
状況
テスト実行時に下記のエラー。
Base table or view not found: 1146 Table '(サービス名).(テーブル名)' doesn't exist
解決法
公式ドキュメントには
どのデータベーステーブルがFlightモデルに対応するかをEloquentに知らせていないことにお気づきかもしれません。別の名前を明示的に指定しない限り、クラスの複数形の「スネークケース」をテーブル名として使用します。
モデルの対応するデータベーステーブルがこの規約に適合しない場合は、モデルにtableプロパティを定義してモデルのテーブル名を自分で指定できます。
今回のエラーが例えば下記だった場合、
Base table or view not found: 1146 Table '(サービス名).flight' doesn't exist
モデルでテーブル名を指定しなかったのでEloquentが「flights」を使用しており、エラーが出た。
下記のようにテーブル名を指定してエラー解決!
class Flight extends Model
{
/**
* モデルに関連付けるテーブル
*
* @var string
*/
protected $table = 'flights';
}
参考
Railsは...
Railsにも命名ルールを上書きするときの書き方があった。
使ったことなかったので知らなかった…
class Flight < ApplicationRecord
self.table_name = "flights"
end