2016-12-20 3 views
0

Я изучаю back-end разработку с помощью Laurvel's Lumen framework, и я пишу класс посева базы данных после Laravel's documentation. Ниже приведены коды:Lumen база данных ошибка посева

Модель 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: insert into `photos` (` link`, `category_id`,` date`) (https://placehold.it/259, 3, 2012-05-28))

[PDOException] SQLSTATE [42S02]: Базовая таблица или представление не найдено: 1146 'homestead.photos' таблица не существует

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

+0

так что до сих пор смотришь на свой код, ничего не называемое ['migrations'] (https: // lumen.laravel.com/docs/5.3/database#migrations). Хорошо, чтобы разработать немного больше, миграции, используемые для создания таблицы, модели, используемые для представления одной строки в таблице, в то время как фабрика для создания семян, в то время как сеялки , вставьте семя в базу данных. –

+1

также laravel всегда предполагают, что имя таблицы - это множественное имя модели .. - т.е. фото как фотографии .. можно переопределить с помощью 'protected $ table' извините за sidetracking. –

+0

Используйте' DB :: table ('photo') ', чтобы выбрать указанную таблицу. – solarhell

ответ

1

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

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

protected $table = 'photo'; 

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