1、seed的作用
在laravel的中文文档是这样写的:Laravel 包含一个填充类可以为你的数据库填充测试数据。所有的填充类都放在 database/seeds 目录下。你可以随意为填充类命名, 但是更建议您遵守类似 UsersTableSeeder 的命名规范。通常, Laravel 默认定义了一个 DatabaseSeeder 类。
所以,seed的作用主要是用来填充数据库中的数据。在实际开发过程中,我们通常需要加入一些测试数据,或者保存数据库中的初始数据,防止在开发过程中遇到的数据丢失,加的话还是挺麻烦的。当然,也可以直接导出数据库的表结构和表数据。
2、seed的使用
具体详细的使用可以看参考文档:laravel5.8中文文档数据填充,也可以看我写的一些小demo。
首先,先见一个model类和相应的数据迁移,通过数据迁移文件来创建数据库。创建的方式采用artisan命令的形式。具体命令如下:
//创建model类并同时生成迁移文件
php artisan make:model demo --migration
创建成功可以看到:
创建成功后编辑model类和迁移文件的内容,如果需要把model类文件放在其他文件夹下需要修改命名空间。
做的修改如下:
model类:
//指定数据库中的表,当然,得保障在.env文件中数据库的配置无误,表名和迁移文件中的表名一直就好
protected $table='demos';
迁移文件:
Schema::create('demos', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('userName'); //用户名
$table->string('passWord'); //密码
$table->timestamps();
});
接下来就可以运行迁移文件生成数据库了,artisan命令如下:
//运行所有未执行的迁移
php artisan migrate
这里可能会有个小问题就是会报错,[报错:字符太长]SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was t oo long;这里可以修改app\Providers\AppServiceProvider.php,在register()方法下加入代码如下:
Schema::defaultStringLength(191);
成功运行迁移后,数据库就有表了,如图:
这时的表中还没有数据,我们就可以通过seeder类来加入一些测试数据。首先,先创建一个seeder类。artisan命令如下:
php artisan make:seeder DemosTableSeeder
创建seed文件DemosTableSeeder.php之后,可以在run()方法中为数据库添加数据。代码如下:
DB::table('demos')->insert([
'userName' => '测试数据1',
'passWord' => '123',
'created_at' => '2019-07-12 13:56:30',
'updated_at' => '2019-07-12 13:56:30'
]);
使用artisan命令运行:
//--class后接seeder类名
php artisan db:seed --class=DemosTableSeeder
执行之后,就会向数据库中填充数据,如图:
在日常开发中,开始时需要的测试数据可能比较多,这里就需要用到模型工厂了。
首先,先创建一个模型工厂:
//创建model工厂并指定model类
php artisan make:factory DemoFactory --model=demo
$factory->define(demo::class, function (Faker $faker) {
return [
//加入一些随机记录,密码加密
'userName' => $faker->userName,
'password' => $faker->md5,
'created_at' => $faker->dateTime,
'updated_at' => $faker->dateTime
];
});
在seeder类中加入以下代码:
//create()方法不仅创建了factory实例,还使用了save()方法将数据保存到了数据库中,其中5为插入数据库中的记录数量
factory(demo::class,5)->create();
再次运行seed文件,结果如下图:
在实际开发中,通常还会用到将已经有的数据库中数据导出成seeder文件,具体过程如下:
首先,使用composer下载扩展,命令如下:
composer require orangehill/iseed
下载完成后,在你的 config/app.php 文件中添加 Service Provider
'providers' => [
...
Orangehill\Iseed\IseedServiceProvider::class,
],
配置完成后就可以使用artisan命令导出数据库中的数据为seeder文件,命令如下:
//demo2s为我一个数据库表的表名
php artisan iseed demo2s
这样就已经把demo2s表中数据导出来了,结果如下:
其他更多的命令有:
//强制覆盖原seeder文件中的数据
php artisan iseed 表名 --force
//导出指定数据库里的表
php artisan iseed 表名--database=数据库名