流明数据库播种错误

时间:2016-12-20 03:36:04

标签: php mysql laravel lumen laravel-seeding

我使用Laravel的Lumen框架学习后端开发,我正在Laravel's documentation之后编写数据库种子课程。以下是代码:

模型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:插入`照片`(`link`,`category_id`,`date`)值(https://placehold.it/259,3,2012-05-28))

     

[PDOException] SQLSTATE [42S02]:未找到基表或视图:1146表' homestead.photos'不存在

我不知道为什么仍然会调用旧表名。我想这是在某个地方保存的,或者我错过了什么,我无法弄清楚错误的原因。

1 个答案:

答案 0 :(得分:1)

Eloquent查找模型类名称的Plural形式作为数据库中的表。因此,在这种情况下,它希望找到一个名为" Photos"

的表

如果由于某种原因您需要为表格命名,您可以通过添加

来覆盖默认值
protected $table = 'photo';

到你的照片模特课。我倾向于这样做,即使我使用默认约定只是作为一个说明自己确切的模型引用的表