0

LaravelのLumenフレームワークを使ったバックエンド開発を学んでおり、Laravelのドキュメンテーションに従ってデータベースシードクラスを書いています。以下にコードを示します。

モデルapp\Photo.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Photo extends Model
{
    protected $fillable = [
        'link', 'category_id', 'date'
    ];
}

モデル工場database\factories\ModelFactory.php

$factory->define(App\Photo::class, function (Faker\Generator $faker) {
    return [
        'link' => 'https://placehold.it/' . mt_rand(200, 400),
        'category_id' => rand(1, 6),
        'date' => date("Y-m-d", mt_rand(1263618000, 1481428800))
    ];
});

DatabaseSeederPhotoTableSeederクラスdatabase\seeds\DatabaseSeeder.php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    public function run()
    {
         $this->call('PhotoTableSeeder');
    }
}

class PhotoTableSeeder extends Seeder
{
    public function run()
    {
        factory(App\Photo::class, 10)->create();
    }
}

以前は、MySQL データベースのテーブル名は次のとおりでした。photos次のコマンドを使用すると、シードが完全に機能しphp artisan db:seedます。

シード済み: PhotoTableSeeder

しかし、テーブル名を に変更しphotoて同じコマンドを実行すると、次のエラーが発生しました。

[Illuminate\Database\QueryException] SQLSTATE[42S02]: ベース テーブルまたはビューが見つかりません: 1146 テーブル 'homestead.photos' が存在しません (SQL: `photos` に挿入 (`link`, `category_id`, `date` ) 値 ( https://placehold.it/259、3、2012-05-28))

[PDOException] SQLSTATE[42S02]: ベース テーブルまたはビューが見つかりません: 1146 テーブル 'homestead.photos' が存在しません

古いテーブル名がまだ呼び出されている理由がわかりません。どこかに保存されていたのか、何か抜けているのか、エラーの原因がわかりません。

4

1 に答える 1

1

Eloquentは、モデルクラス名の複数形をデータベース内のテーブルとして探します。この場合、「Photos」というテーブルが見つかることを期待していました。

何らかの理由でテーブルに Photo という名前を付ける必要がある場合は、追加することでいつでもデフォルトをオーバーライドできます

protected $table = 'photo';

あなたの写真モデルクラスに。モデルが参照しているテーブルを正確に自分自身へのメモとして、デフォルトの規則を使用している場合でも、これを行う傾向があります

于 2016-12-20T04:04:58.077 に答える