Skip to content

数据迁移

在入门最后一节中,我们开始将数据迁移到控制器,通过个人资料的案例来展示了动态数据变化。但是是使用写死一个 PHP 数组数据来实现的。这样就比较被动了,虽然数据渲染是动态变化了,但是数据源却是无法动态变化,只能手动改变数据源。这个时候就该数据库登场了,使用数据库存储数据,然后再通过代码查找数据就能实现动态变化了

介绍

数据迁移并不能按字面意思理解,这里在框架的意思应该准确的理解为创建数据表的版本控制工具。一般我们在团队协作或者个人开发都是使用某些数据库客户端创建表,例如navicat。但是对于小团队而言,不适合配合。如果在本地做开发,假如 A 成员添加了某个字段,B 成员在同步代码之后就有可能因为这个字段缺失而导致异常。所以如果选择数据迁移工具,团队间合作将会更加分布式。只需要执行代码中的迁移文件即可完成数据字段的同步,而无需成员之间沟通。

INFO

总结一句话,数据迁移使用代码即可完成创建表,修改表等一些列操作,而不需要使用 navicat 等数据库客户端工具,

使用

让我们回到上一节的内容,在演示动态内容的时候,我们有一组个人资料数据。我们还是用之前的演示,只不过这次我们将使用数据库来做。在这功能之前,先创建个人资料表。使用以下命令来创建迁移

shell
php artisan make:migration profiles

执行迁移之后,Laravel 会在 database/migrations 自动创建对应迁移文件,执行命令后会输出对应文件目录。找到创建的 migration 文件

php
<?php

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

return new class extends Migration
{
    /**
     * 执行migraion
     *
     * Run the migrations.
     */
    public function up(): void
    {
        //
        Schema::create('profiles', function (Blueprint $table) {
            $table->id();

            $table->string('name')->comment('姓名');

            $table->string('email')->comment('邮箱');

            $table->tinyInteger('age')->comment('年龄');

            $table->string('info', 1000)->comment('个人简介');

            $table->timestamp('created_at')->useCurrent();

            $table->timestamp('updated_at')->useCurrent();

            $table->softDeletes();
        });
    }

    /**
     * 回滚
     *
     * Reverse the migrations.
     */
    public function down(): void
    {
        //
        Schema::drop('profiles');
    }
};

创建完成之后呢,使用 php artisan migrate 命令,来执行迁移创建数据表。通过 mysql 客户端查看对应表的结构如下 数据迁移-laravel入门学习

不光这样,每次迁移都会迭代一个迁移文件记录,在 migrations 表,如下图,会生成一个 migration 文件名的对应的记录 数据迁移-laravel入门学习

所以一般在团队合作中,使用migration非常适合团队成员同步表结构,也在很大程度上避免了手动修改表结构带来的问题。

关于数据表字段创建细节请查看其文档migration