站长图库

Laravel数据库迁移

󰌂发布时间 2020-08-05 热度 319

 当前位置:  首页 / 教程资源 / 后端教程

教程内容:

Laravel的数据迁移功能很好用,并且可以带来一系列好处。
通过几条简单的 artisan 命令,就可以顺利上手,没有复杂的地方

注意:该系列命令对数据库非常危险,请准备一个单独的数据库作为配套练习,假设你已经新建了一个空的数据库

首先新建一个迁移表文件,比如test表

php artisan make:migration CreateTestTable (文件名格式并没有要求)


这个时候项目中生成了一个新的迁移文件,在 project/database/migrations/ 目录下

打开这个文件,编辑表结构

      public function up()
    {
        Schema::create('test', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name',30);
            $table->integer('sex');
            $table->timestamps();
        });
    }


这个时候数据库应该还是空的,没有任何表,这个时候执行:

php artisan migrate:fresh


现在数据库里面多了一张test表了,然后在打开迁移文件,增加字段或者删除字段等修改,再次执行上面的命令,数据库的test表被刷新了。

到此Laravel的数据库迁移就已经完了。

但是通常还有一个功能和数据库迁移经常同事存在,为了方便调试我们通常要往数据库里面填充一些数据,就是数据填充。

php artisan make:seed TestSeeder


这个时候项目中生成了一个新的seeder文件,在 project/database/seeds/ 目录下

     public function run(){
        \Illuminate\Support\Facades\DB::table('test')
            ->insert([
                'name' => '张三' . str_random(),
                'sex' => rand(0,1)
            ]);
    }


打开seeds目录下自带的  DatabaseSeeder.php 文件,编辑run方法

   public function run(){
        $this->call(TestSeeder::class);
    }


然后执行  php artisan db:seed

这个时候 test 表会增加一条数据,如果要一次批量增加更过数据可以这样:

      public function run(){
        for ($i = 0; $i < 100; $i++) {
            $this->call(TestSeeder::class);
        }
    }


这种数据填充的方式不是很优雅,我们换一种更好的方式来实现数据填充

新建一个 Test 模型: php artisan make:model Test

这个时候项目中生成了一个新的Model文件,在 project/app/ 目录下

打开文件添加一个属性  protected $table = 'test'; (绑定表)

在创建一个模型工厂: php artisan make:factory TestFactory

这个时候项目中生成了一个新的Factory文件,在 project/database/factories/ 目录下,打开并编辑:

$factory->define(\App\Test::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'sex' => $faker->biasedNumberBetween(0,1)
    ];
});


重新打开并编辑对应的Seeder文件:TestSeeder.php

     public function run(){
        factory(\App\Test::class,50)->create();
//        \Illuminate\Support\Facades\DB::table('test')
//            ->insert([
//                'name' => '张三' . str_random(),
//                'sex' => rand(0,1)
//            ]);
    }


再次执行: php artisan db:seed ,这个时候数据库一次多了50条数据

常用命令组合

php artisan migrate:fresh --seed (重建数据表结构并执行数据填充)


其他

对于老项目想要快速介入 Laravel的数据迁移,一个表一个表的去建 Migrate显然是很累的,github上有一个将根据表自动生成migrate的库可供参考:

https://github.com/Xethron/migrations-generator

注意: 最近发现这个库还有有一些问题,生成迁移文件后还是挨个检查一下,在本地运行看看结果

评论(0)条

    站长图库

    站长素材 - 建站资源分享平台

    虚拟库提供各类虚拟产品,虚拟资源以及教程、模板、素材等,虚拟库是一个互联网虚拟产品,虚拟资源聚集地的特色网站!

    反馈建议

    kefu@xuniku.cn fuwu@xuniku.cn

    周一至周日9:00-23:00

    在线QQ咨询

    本期推荐小程序

    本站所有资源均为会员提供或网上搜集,版权归原作者所有,如需商业用途或转载请与原作者联系!所提供的内容仅供观摩学习交流之用,请勿用作商业用途!如有侵权,请及时 联系我们 删除

    Powered by 虚拟库 © 2010-2020 流量联盟   copyright   北京流量圈信息科技有限公司