laravel 的数据库迁移与数据填充

什么是数据库迁移?


laravel 的简介是

数据库迁移就像是数据库的 版本控制,可以让你的团队轻松修改并共享应用程序的数据库结构。迁移通常与 Laravel 的数据库结构生成器配合使用,让你轻松地构建数据库结构。如果你曾经试过让同事手动在数据库结构中添加字段,那么数据库迁移可以让你不再需要做这样的事情。

Laravel Schema facade 对所有 Laravel 支持的数据库系统提供了创建和操作数据表的相应支持。

1.创建一个数据库

可以在phpmyadmin 中或 在sql 控制台中创建一个 laravel5的数据库

2.修改.env 中的数据库信息

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=hostname
DB_USERNAME=username
DB_PASSWORD=password

3.生成迁移文件

laravel自身就有生成好的迁移文件,在书写新生成的迁移文件时可以相互对照。
迁移文件存放在database/migrations中

使用 Artisan 命令make:migration 来创建迁移:

   // 创建一个新的迁移文件
 // --create     将被创建的数据表.
 // --table      将被迁移的数据表.
php artisan make:migration [--create[="..."]] [--table[="..."]] name

可以书写为

   php artisan make:migration create_posts_table
   php artisan make:migration create_posts_table --create=posts

4.编译迁移文件

 /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title',100)->default("");
            $table->text('content');
            $table->integer('user_id')->default(0);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }


5.4的laravel 还不能自动生成down 中的代码5.5会自动生成可以少写一段


解释一下这个文件

up方法是为数据库添加新的数据表,字段或索引,而down方法则与up相反就是删除一个表一个字段

5.运行迁移

php artisan migrate
生成迁移文件时 会出现你的字段长了 1000 798 这样的提示,说你的string 字段没有设置出错, 但是有的表还是建了,或者就没有建的时候 ,要是建了就需要 把建了的表删除了, 不然以后每一次都会报错。
这个错误的解决方式有两种:

  • 第一种就是看自带的migration 文件中的字段是否都设置了长度,如果没有就帮他设置上。

  • 第二种就是修改默认的 string 的长度
    一种是在app/Providers 的appServiceProvider.php 文件中的boot方法中添加

    public function boot()
    {
        //  设置数据迁移中 string 的默认长度
        Schema::defaultStringLength(250);
    }

一种就是\vendor\laravel\framework\src\Illuminate\Database\Schema\Builder.php
中的 默认长度修改为 提示最大长度除四的结果。

public static $defaultStringLength = 255;

数据库回滚

数据库回滚有两种形式 和四种命令
一种就是删除表

扫描二维码关注公众号,回复: 904788 查看本文章
//回滚最后一次迁移,但其中可以包含很多迁移文件
php artisan migrate:rollback
//也可以限制回滚个数
php artisan migrate:rollback --step=num 
                //num =1 如果是一起 migrate 的就会回滚最后一个文件中的表
                // 0<num,num>文件次数 都是不会报错的。
//回滚所有的迁移
php artisan migrate:reset

一种就是重置数据库

//不仅会回滚数据库的所有迁移还会接着运行 migrate 命令
php artisan migrate:refresh
//同样可以 限制回滚个数
//php artisan migrate:refresh --step=num
//删除数据表并执行migrate
php artisan migrate:fresh

什么是数据填充


laravel 的简介是

Laravel 可以用 seed 类轻松地为数据库填充测试数据。所有的 seed 类都存放在 database/seeds 目录下。你可以任意为 seed 类命名,但是更应该遵守类似 UsersTableSeeder 的命名规范。Laravel 默认定义的一个 DatabaseSeeder 类。可以在这个类中使用 call 方法来运行其它的 seed 类从而控制数据填充的顺序。
database\factories\ 中的文件对数据填充时很重要的。

1.生成Post model 文件

php artisan make:model Post

2.生成PostsTableSeeder.php文件

php artisan make:seeder PostsTableSeeder

文件在\database\seeds\下

3.编辑PostsTableSeeder文件

 public function run()
    {
        //
        DB::table('posts')->insert([
            ['title'=>'测试一','content'=>'测试一'],
            ['title'=>'测试二','content'=>'测试二']
        ]);

    }
}

4.执行seed命令

php artisan db:seed -class=PostsTablesSeeder

seed 命令是文件DataTablesSeeder
你也可以直接编译在里面(不建议)或者在 DataTablesSeeder编译

   public function run()
    {
        // $this->call(UsersTableSeeder::class);
        $this->call(PostsTableSeeder::class);
    }

如果我们对内容没有要求


1.建立一个填充文件


(如Postfactorie)

php artisan make:factory PostFactory

2.编辑PostFactory文件

<?php

use Faker\Generator as Faker;

$factory->define(App\Post::class, function (Faker $faker) {
    return [
        'title' => $faker->sentence(6),
        'content' => $faker->paragraph(10),
    ];
});

3.编译PostsTableSeeder文件

 public function run()
    {
        //
       factory(\App\Post::class)->times(10)->create();
    }

4.执行 seed 命令

php artisan db:seed 

也可以直接在Tinker 进行添加

php artisan tinker
factory(\App\Post::class,10)->create();

5.在数据迁移时,就直接把数据填充上

如果在数据迁移时,就直接把数据填充上岂不是更好。
根据laravel 数据迁移命令中 的参数可以 看出laravel 就有这样的准备
有三种命令就是

//迁移时填充
 php artisan migrate -seed 
 //也可以直接写在 迁移文件中
 // 回滚时也可以填充
 php artisan migrate:refresh --seed
 php artisan migrate:fresh --seed
 //但是不能指定文件 所以还是要在DatabaseSeedr 文件中编译的

如果有错误,或者需要补充的欢迎留言。

猜你喜欢

转载自blog.csdn.net/qq_38365479/article/details/79919477
今日推荐