page contents

Laravel数据库迁移

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

attachments-2020-06-CoN0KVne5eec147392320.png

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/ 目录下

打开并编辑里面的run方法:

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

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


attachments-2020-06-zi1jzSnA5eec148f9f870.jpg

  • 发表于 2020-06-19 09:27
  • 阅读 ( 721 )
  • 分类:PHP开发

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章