laravelのModelでテーブル名は明示したほうが良さそうという話
laravelのリレーションの話
リレーションでuserに関連するuser_informationsを取得したい
リレーションを貼る
public function user_informations()
{
return $this->hasOne(UserInformation::class);
}
withメソッドを使おうと思っていたらこんなエラーがでた。
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel_local.user_information' doesn't exist (SQL: select * from `user_information` where `user_information`.`user_id` in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12))
テーブルが見つからないらしい。
user_informationを探しているが目的のテーブル名はuser_informationsだ。
その目的のテーブルのもmodelがこれ↓
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class UserInformation extends Model
{
use HasFactory;
}
laravelはテーブル名が指定されてない場合model名をスネークケースにして複数形にしたものをテーブル名として取得するが
どうやらまれに複数系を認識できなかったりするらしい。
(informationが普通は不可算名詞でinformationsにはならないから?)
なのでこうする
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class UserInformation extends Model
{
use HasFactory;
protected $table = 'user_informations';
}
protected $table =とすることでテーブル名を明示できる。
これでエラーは解決。
今日の教訓
たまにmodelがテーブルを認識できないことがあるのでテーブル名は明示したほうがいいのかも。
Author And Source
この問題について(laravelのModelでテーブル名は明示したほうが良さそうという話), 我々は、より多くの情報をここで見つけました https://qiita.com/wwwesk/items/72c5d55b1284ea55c5c6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .