はい、今回テーブル名とそれに紐づくモデルの名前が一致しなくてエラーがでちゃいました。
なので解決策共有
Table of Contents
何を伝えたい
どうすれば、model内でtable名を定義できるのか。というのを理解しましょう。
今回起こった問題点
僕が中間テーブルを作りました。その中間テーブル名がclub_user_tableだったとします。
clubテーブルとuserテーブルの中間テーブルをイメージしてください。
その時にClubUserModelを作ったときに問題が起きました。
ClubUserModelを利用してレコードを格納しようとすると、「club_users_tableは存在しません」ってなエラーがでたわけです。
そう、複数系のテーブルを呼び出そうとしていたんですね~
これをどうしたら解決できるのか!
解決方法
公式のページに掲載されていました。
テーブル名
上記の例をちょっと見て、どのデータベーステーブルがFlight
モデルに対応するかをEloquentに知らせていないことにお気づきかもしれません。別の名前を明示的に指定しない限り、クラスの複数形の「スネークケース」をテーブル名として使用します。したがって、この場合、EloquentはFlight
モデルがflights
テーブルにレコードを格納し、AirTrafficController
モデルはair_traffic_controllers
テーブルにレコードを格納すると想定できます。https://readouble.com/laravel/8.x/ja/eloquent.html
モデルの対応するデータベーステーブルがこの規約に適合しない場合は、モデルにtable
プロパティを定義してモデルのテーブル名を自分で指定できます。
とにかくtableプロパティを定義して、モデルのテーブル名を自分で指定する必要があるってことですね!
今回の解決方法はprotected $table = 'table名';
を使うのです!
例はこんな感じ↓
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ClubUser extends Model
{
/**
* モデルに関連付けるテーブル
*
* @var string
*/
protected $table = 'club_user';
}
Code language: HTML, XML (xml)
こんな感じでテーブルを定義します。
まとめ
モデルは非常に便利ですよね。やりたいこと大体できちゃう。