laravel中seed

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=数据库名
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值