8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

テーブル名が自動的に複数形になる

Last updated at Posted at 2019-04-21

Qiita初投稿です。

#取り組んでいた箇所
新規投稿フォームを作成後、Migrationでテーブルを作成しデータを保存するといった部分。
教材を参考にしてコードを書いて行き、フォームにデータを入力し、更新ボタンをクリック!

ここでエラーが!!

SQLSTATE[42S02]: Base table or view not found: 1146 Table`データベース名.テーブル名`~

※僕の場合はワインのサイトを作成していたので、
「データベース名/テーブル名」部分は→「mywine/wine」で作成していました!

エラーの内容自体は「参照しにいったテーブルがないですよー」とのこと。

もう少しよく見てみるとエラーに表示されているのは
「mywine/winesのテーブルなんてないよ〜」でした。

???

なぜ wine ではなくて wines を参照しにいってるの??

答えがこちら↓

#自動的にテーブルを複数形にされる

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

簡単に言うと、「Laravelはテーブル名を明示的に指定していない場合、Modelのクラス名に対して複数系の名前でデータベースにテーブルを探しに行く」ということらしいです。

#解決方法

なぜ複数形になるのか仕組みが理解できたので、今回は、

php artisan migrate:rollback

でwineテーブルを取り消し、新たにwinesテーブルを作る。
これだけで解決しました。

#感想(おまけ)

前述の通り、教材を参考に自分のサイトを作成していました。
その教材ではサンプルで、ニュース投稿フォームを作成しており、テーブル名は「news」でした。
こちらは元々テーブル名が複数形なので問題なかったということですね!

・どういう処理が行われているのか、どこからどこが呼び出されているかがわかっていなかった
・データベースの構造
など、理解が甘かったので時間がかかりました。
基礎的なことが理解できていればもっと早く解決できたと思います。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?