流明数据库播种错误
Lumen database seeding error
我正在学习使用 Laravel 的 Lumen 框架进行后端开发,并且我正在编写数据库播种 class 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))
];
});
DatabaseSeeder
和 PhotoTableSeeder
class 和 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 数据库中的 table 名称是 photos
并且使用命令 php artisan db:seed
:
播种工作完美
Seeded: PhotoTableSeeder
但是当我将 table 名称更改为 photo
和 运行 相同的命令时,出现了这些错误:
[Illuminate\Database\QueryException] SQLSTATE[42S02]: Base table or view not found: 1146 Table 'homestead.photos' doesn't exist (SQL: insert into `photos` (`link`, `category_id`, `date`) values (https://placehold.it/259, 3, 2012-05-28))
[PDOException] SQLSTATE[42S02]: Base table or view not found: 1146 Table 'homestead.photos' doesn't exist
不知道为什么还叫老table名字。我猜它被保存在某个地方或者我遗漏了什么,我无法找出错误的原因。
Eloquent 在数据库中查找模型 Class 名称的复数形式作为 table。所以在这种情况下,它期望找到一个名为 "Photos"
的 table
如果出于某种原因您需要为 table 照片命名,您始终可以通过添加
覆盖默认值
protected $table = 'photo';
给你的照片模特class。即使我使用默认约定,我也倾向于这样做,只是作为对自己的注释,确切地 table 模型正在引用
我正在学习使用 Laravel 的 Lumen 框架进行后端开发,并且我正在编写数据库播种 class 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))
];
});
DatabaseSeeder
和 PhotoTableSeeder
class 和 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 数据库中的 table 名称是 photos
并且使用命令 php artisan db:seed
:
Seeded: PhotoTableSeeder
但是当我将 table 名称更改为 photo
和 运行 相同的命令时,出现了这些错误:
[Illuminate\Database\QueryException] SQLSTATE[42S02]: Base table or view not found: 1146 Table 'homestead.photos' doesn't exist (SQL: insert into `photos` (`link`, `category_id`, `date`) values (https://placehold.it/259, 3, 2012-05-28))
[PDOException] SQLSTATE[42S02]: Base table or view not found: 1146 Table 'homestead.photos' doesn't exist
不知道为什么还叫老table名字。我猜它被保存在某个地方或者我遗漏了什么,我无法找出错误的原因。
Eloquent 在数据库中查找模型 Class 名称的复数形式作为 table。所以在这种情况下,它期望找到一个名为 "Photos"
的 table如果出于某种原因您需要为 table 照片命名,您始终可以通过添加
覆盖默认值protected $table = 'photo';
给你的照片模特class。即使我使用默认约定,我也倾向于这样做,只是作为对自己的注释,确切地 table 模型正在引用