laravel 数据迁移与填充


数据表的迁移与填充:


  • 迁移: 创建数据表,删除数据表,修改数据表。
  • 填充: 往数据表里填充写入测试的数据。
    一定是先迁移再填充

数据表迁移操作:


(1)创建与编写迁移文件

php artisan make:migration 迁移文件名

在laravel文件目录下打开命令行窗口,输入php artisan make:migration create_paper_table
就是在database/migration/目录下创建一个叫create_paper_table的文件
在这里插入图片描述
在这里插入图片描述
打开文件就会是下面这样(up方法是创建表,down方法是删除表

$table->bigIncrements(‘id’);
$table表的实例->列类型方法(字段名,[长度/范围值])->修饰方法([修饰方法值])
列类型方法和修饰方法的编写顺序不可以转换

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePaperTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    //创建数据表
    public function up()
    {
		//paper创建表的名,
        Schema::create('paper', function (Blueprint $table) {
			// $table->bigIncrements('id');
            //$table表的实例->列类型方法(字段名,[长度/范围值])->修饰方法([修饰方法值])
            //列类型方法和修饰方法的编写顺序不可以转换
          $table->increments('id')->comment('主键');
            $table->string('paper_name',100)->unique()->comment('试卷名称');
            $table->tinyInteger('total_score')->default(100)->comment('试卷总分');
            $table->integer('start_time')->comment('开始考试时间');
            $table->tinyInteger('duration')->comment('考试时间长度');
            $table->tinyInteger('status')->default(1)->comment('试卷是否启用状态,1表示启用,2表示禁用,默认为1');
			// $table->tinyInteger('status',['1','2'])->default('1');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    //删除数据表
    public function down()
    {
        //删除的表名
        Schema::dropIfExists('paper');
    }
}

创建列的可用类型:

  • $table->bigIncrements(‘id’); 自增ID,类型为bigint
  • $table->bigInteger(‘votes’); 等同于数据库中的BIGINT类型
  • $table->binary(‘data’); 等同于数据库中的BLOB类型
  • $table->boolean(‘confirmed’); 等同于数据库中的BOOLEAN类型
  • $table->char(‘name’, 4); 等同于数据库中的CHAR类型
  • $table->date(‘created_at’); 等同于数据库中的DATE类型
  • $table->dateTime(‘created_at’); 等同于数据库中的DATETIME类型
  • $table->decimal(‘amount’, 5, 2); 等同于数据库中的DECIMAL类型,带一个精度和范围
  • $table->double(‘column’, 15, 8); 等同于数据库中的DOUBLE类型,带精度, 总共15位数字,小数点后8位.
  • $table->enum(‘choices’, [‘foo’, ‘bar’]); 等同于数据库中的 ENUM类型
  • $table->float(‘amount’); 等同于数据库中的 FLOAT 类型
  • $table->integer(‘votes’); 等同于数据库中的 INTEGER 类型
  • $table->ipAddress(‘visitor’); 等同于数据库中的 IP 地址
  • $table->json(‘options’); 等同于数据库中的 JSON 类型
  • $table->jsonb(‘options’); 等同于数据库中的 JSONB 类型
  • $table->longText(‘description’); 等同于数据库中的 LONGTEXT 类型
  • $table->macAddress(‘device’); 等同于数据库中的 MAC 地址
  • $table->mediumIncrements(‘id’); 自增ID,类型为无符号的mediumint
  • $table->mediumInteger(‘numbers’); 等同于数据库中的 MEDIUMINT类型
  • $table->mediumText(‘description’); 等同于数据库中的 MEDIUMTEXT类型
  • $table->morphs(‘taggable’); 添加一个 INTEGER类型的 taggable_id 列和一个 STRING类型的 taggable_type列
  • $table->nullableTimestamps(); 和 timestamps()一样但允许 NULL值.
  • $table->rememberToken(); 添加一个 remember_token 列: VARCHAR(100) NULL.
  • $table->smallIncrements(‘id’); 自增ID,类型为无符号的smallint
  • $table->smallInteger(‘votes’); 等同于数据库中的 SMALLINT 类型
  • $table->softDeletes(); 新增一个 deleted_at 列 用于软删除.
  • $table->string(‘email’); 等同于数据库中的 VARCHAR 列 .
  • $table->string(‘name’, 100); 等同于数据库中的 VARCHAR,带一个长度
  • $table->text(‘description’); 等同于数据库中的 TEXT 类型
  • $table->time(‘sunrise’); 等同于数据库中的 TIME类型
  • $table->timeTz(‘sunrise’); 等同于数据库中的 TIME 类型(带时区)
  • $table->tinyInteger(‘numbers’); 等同于数据库中的 TINYINT 类型
  • $table->timestamp(‘added_on’); 等同于数据库中的 TIMESTAMP 类型
  • $table->timestampTz(‘added_on’); 等同于数据库中的 TIMESTAMP 类型(带时区)
  • $table->timestamps(); 添加 created_at 和 updated_at列
  • $table->timestampsTz(); 添加 created_at 和 updated_at列(带时区)
  • $table->unsignedBigInteger(‘votes’); 等同于数据库中无符号的 BIGINT 类型
  • $table->unsignedInteger(‘votes’); 等同于数据库中无符号的 INT 类型
  • $table->unsignedMediumInteger(‘votes’); 等同于数据库中无符号的 MEDIUMINT 类型
  • $table->unsignedSmallInteger(‘votes’); 等同于数据库中无符号的 SMALLINT 类型
  • $table->unsignedTinyInteger(‘votes’); 等同于数据库中无符号的 TINYINT 类型
  • $table->uuid(‘id’); 等同于数据库的UUID

列修改器:

  1. ->after(‘column’) 将该列置于另一个列之后 (仅适用于MySQL)
  2. ->comment(‘my comment’) 添加注释信息
  3. ->default($value) 指定列的默认值
  4. ->first() 将该列置为表中第一个列 (仅适用于MySQL)
  5. ->nullable() 允许该列的值为NULL
  6. ->storedAs($expression) 创建一个存储生成列(只支持MySQL)
  7. ->unsigned() 设置 integer 列为 UNSIGNED
  8. ->virtualAs($expression) 创建一个虚拟生成列(只支持MySQL)

(2)创建完成迁移文件以后 执行迁移文件

  1. 在laravel文件目录结构下打开命令行窗口
  2. 输入php artisan migrate:install
  3. 打开Navicat就会看到数据库里多了migrations表

在这里插入图片描述
其中的表中的migration字段代表已经执行过的迁移文件名,batch字段代表批次号

执行创建表的方法(up方法)

  • 在laravel文件目录结构下打开命令行窗口,输入 php artisan migrate
  • 注意:执行过一次的迁移文件不会再次执行;把已经执行过的迁移文件进行改名,再次执行会报错(把原来默认生成的迁移文件删除即可)
    执行完后,数据库里会生成创建的表,migrations表里也会添加字段
    在这里插入图片描述
    执行迁移文件的删除方法(down方法)
  • 在文件下的命令行窗口,输入php artisan migrate:rollback
  • 回滚操作,会删除同一批次建立的数据表
  • 执行完以后,数据库里的migrations表里的字段和迁移文件创建的数据表会删除

(3)创建填充器,并进行数据的填充
注意:

  • 一个填充器可以填充所有的数据表
  • 在编写填充器代码的时候可以不用引入DB类,可以直接使用,手动引入会报错误

关于为什么使用DB类进行数据填充而不适用模型类填充数据:
模型类只可以定义一个表,比较局限,而DB 类可以填充数据库的所有的数据表,正好符合填充器填充数据库里所有数据表的要求。

创建填充器:
在文件目录下打开命令行,输入php artisan make:seeder 填充器名字
在这里插入图片描述
编写填充器里用来数据填充的代码:

<?php

use Illuminate\Database\Seeder;

class PaperTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
      DB::table('paper')->insert(
		[
            [
                'paper_name'		=>'english',
                'total_score'		=>100,
                'start_time'		=>time()+86400,
                'duration'          =>120,
                'status'            =>1,
            ],
            [
                'paper_name'		=>'chinese',
                'total_score'		=>100,
                'start_time'		=>time()+86400,
                'duration'          =>120,
                'status'            =>1,
              ],
            [
                'paper_name'		=>'math',
                'total_score'		=>100,
                'start_time'		=>time()+86400,
                'duration'          =>120,
                'status'            =>1,
              ],
            [
                'paper_name'		=>'history',
                'total_score'		=>100,
                'start_time'		=>time()+86400,
                'duration'          =>120,
                'status'            =>1,
              ],
		]
      );

    }
}

执行填充器文件:
文件目录下的命令行输入 php artisan db:seed --class 文件名
文件名不要加后缀
在这里插入图片描述
查看已经填充了的数据
在这里插入图片描述
数据填充成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值