Laravel Eloquentモデルで任意のテーブル名に変更する方法

例えば、データベースにBooksテーブルを作った場合、Bookモデルを使えば以下のようにBooksテーブルを操作できる。


use App\Book;

//(略)

$books = Book::all(); // 「Book」で「Books」テーブルを操作できる

これは、Laravelではモデルのクラス名の複数形をテーブル名として使用するようになっているから。

テーブル名 –

https://readouble.com/laravel/5.8/ja/eloquent.html#eloquent-model-conventions

Flightモデルにどのテーブルを使用するか、Eloquentに指定していない点に注目してください。他の名前を明示的に指定しない限り、クラス名を複数形の「スネークケース」にしたものが、テーブル名として使用されます。今回の例で、EloquentはFlightモデルをflightsテーブルに保存します。モデルのtableプロパティを定義し、カスタムテーブル名を指定することもできます。

このような

  • モデル : 単数形
  • テーブル名 : 複数形

のルールに縛られずに任意の名前でテーブルを操作したいときの設定は以下の通り。


class Book extends Model
{
    /**
     * モデルと関連しているテーブル
     *
     * @var string
     */
    protected $table = 'hogehoge'; // ここで任意の名前を設定
}

Bookのように単数形・複数形が分かりやすい名前なら、「テーブル名はBOOKSにしておいて、テーブル操作時はBOOKを使えば良い」というのが簡単に分かる。

しかし、英単語によっては複数形が分かりにくかったり(単にsやesを付けるだけではないケースもある)、そもそも不可算名詞だったりする場合もあるので、状況に応じて自分で任意の名前を設定した方が良いかもしれない。

ちなみに、モデルのクラス名を「SNS」にしても「SNSESテーブル」にはアクセスできなかった。

「SNSテーブルが見つからない」とのことなので、「SNS」は不可算名詞らしい。

コメントを残す

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