Ошибка заполнения базы данных Lumen

Я изучаю внутреннюю разработку с помощью фреймворка 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))
    ];
});

DatabaseSeeder и PhotoTableSeeder классы 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' не существует

Я не знаю, почему все еще называют старое имя таблицы. Я предполагаю, что он был где-то сохранен или я что-то упустил, я не могу понять причину ошибки.


person Nhan    schedule 20.12.2016    source источник
comment
так что ... пока смотрю на ваш код, ничего с названием migrations не видно .. хорошо , чтобы немного уточнить, миграции, используемые для создания таблицы, модели, используемые для представления одной строки в таблице, в то время как factory для создания семян, в то время как сеялки вставляют семя в базу данных ..   -  person Bagus Tesa    schedule 20.12.2016
comment
также laravel всегда предполагает, что имя таблицы - это имя модели во множественном числе .. - т.е. фото как фотографии .. можно заменить с помощью protected $table извините за отклонение в сторону ..   -  person Bagus Tesa    schedule 20.12.2016
comment
Используйте DB::table('photo') для выбора указанной таблицы.   -  person solarhell    schedule 20.12.2016
comment
@solarhell, как сказали Багус и Эрик, переопределение имени таблицы в модели - это именно то, что мне нужно.   -  person Nhan    schedule 20.12.2016


Ответы (1)


Eloquent ищет форму множественного числа имени класса модели в виде таблицы в базе данных. Итак, в этом случае ожидалось найти таблицу под названием «Фотографии».

если по какой-то причине вам нужно назвать таблицу Photo, вы всегда можете переопределить значение по умолчанию, добавив

protected $table = 'photo';

в класс вашей фотомодели. Я стараюсь делать это, даже когда использую соглашения по умолчанию, просто как примечание для себя, на какую именно таблицу ссылается модель.

person gsueagle2008    schedule 20.12.2016