数据表的迁移与填充:
- 迁移: 创建数据表,删除数据表,修改数据表。
- 填充: 往数据表里填充写入测试的数据。
一定是先迁移再填充
数据表迁移操作:
(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
列修改器:
- ->after(‘column’) 将该列置于另一个列之后 (仅适用于MySQL)
- ->comment(‘my comment’) 添加注释信息
- ->default($value) 指定列的默认值
- ->first() 将该列置为表中第一个列 (仅适用于MySQL)
- ->nullable() 允许该列的值为NULL
- ->storedAs($expression) 创建一个存储生成列(只支持MySQL)
- ->unsigned() 设置 integer 列为 UNSIGNED
- ->virtualAs($expression) 创建一个虚拟生成列(只支持MySQL)
(2)创建完成迁移文件以后 执行迁移文件
- 在laravel文件目录结构下打开命令行窗口
- 输入php artisan migrate:install
- 打开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 文件名
文件名不要加后缀
查看已经填充了的数据
数据填充成功