php artisan migrate,到底是如何从零产生的?

1. 什么是数据库迁移(Migration)?

  • 简单解释
    数据库迁移是一种管理数据库结构的方式。它通过编写代码来定义数据库表的结构(比如字段名称、类型等),而不是手动操作数据库工具(如 phpMyAdmin 或 MySQL Workbench)。这样可以让团队协作更方便,并且可以轻松地在不同环境中同步数据库。

  • 类比
    想象你在搭积木,每块积木代表一个数据库表或字段。如果每次都要手动摆放积木,可能会很麻烦,而且容易出错。而迁移就像是一个说明书,告诉你如何一步一步搭建积木,确保每个人都能按照相同的步骤完成。


2. 运行命令发生了什么?

当你运行以下命令:

php artisan migrate

会发生以下事情:

(1) 读取迁移文件

Laravel 会检查 database/migrations 目录下的所有迁移文件。这些文件是通过 php artisan make:migration 命令生成的,每个文件都定义了一个数据库表的结构。

(2) 执行迁移

Laravel 会按照文件的时间戳顺序依次执行这些迁移文件中的指令。例如:

  • 创建新表。
  • 添加字段。
  • 修改字段类型。
(3) 更新数据库

Laravel 会将迁移的结果保存到数据库中,通常会在一个名为 migrations 的表中记录哪些迁移已经执行过。


3. 迁移文件是如何产生的?

让我们一步步拆解迁移文件的产生过程。

(1) 创建迁移文件

运行以下命令:

php artisan make:migration create_users_table

这会在 database/migrations 目录下生成一个文件,文件名类似于:

2023_10_01_123456_create_users_table.php

文件名中的时间戳(2023_10_01_123456)用于确定迁移的执行顺序。

(2) 文件内容

生成的文件看起来像这样:

<?php

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

class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('users');
    }
}

4. 迁移文件的关键部分

让我们拆解一下这个文件的内容:

(1) up() 方法
  • 作用
    这是你定义数据库表结构的地方。当运行 php artisan migrate 时,Laravel 会调用这个方法,按照你的指令创建或修改表。

  • 示例逻辑
    在上面的例子中,up() 方法创建了一个名为 users 的表,包含以下字段:

    • id:主键字段。
    • name:字符串字段。
    • email:唯一字符串字段。
    • timestamps():自动添加 created_atupdated_at 字段。
  • 类比
    想象你在设计一张表格,表格的每一列代表一个字段。up() 方法就像是你告诉打印机:“请帮我打印一张表格,第一列是 ID,第二列是名字,第三列是邮箱。”

(2) down() 方法
  • 作用
    这是用来撤销迁移的。如果你运行 php artisan migrate:rollback,Laravel 会调用这个方法,删除之前创建的表或字段。

  • 示例逻辑
    在上面的例子中,down() 方法删除了 users 表:

    Schema::dropIfExists('users');
    
  • 类比
    想象你在清理房间,把之前搭好的积木拆掉。down() 方法就是用来“拆除”数据库表的。


5. 迁移的工作流程

让我们从头到尾演示一遍完整的迁移过程。

(1) 创建迁移文件

运行命令:

php artisan make:migration create_users_table
(2) 编辑迁移文件

打开生成的文件,修改如下:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->integer('age')->nullable(); // 新增字段
        $table->timestamps();
    });
}

public function down()
{
    Schema::dropIfExists('users');
}
(3) 运行迁移

运行以下命令:

php artisan migrate

Laravel 会根据 up() 方法的指令,在数据库中创建 users 表。

(4) 查看结果

打开数据库管理工具(如 phpMyAdmin 或 MySQL Workbench),你会看到一个新的 users 表,包含以下字段:

  • id
  • name
  • email
  • age
  • created_at
  • updated_at
(5) 回滚迁移

如果你想撤销迁移,可以运行以下命令:

php artisan migrate:rollback

Laravel 会调用 down() 方法,删除 users 表。


6. 总结

通过以上内容,你应该已经了解了以下几点:

  1. 迁移的作用:它是一种通过代码管理数据库结构的方式。
  2. 如何创建迁移文件:通过运行 php artisan make:migration 命令生成。
  3. 迁移文件的内容
    • up() 方法:定义如何创建或修改表。
    • down() 方法:定义如何撤销迁移。
  4. 迁移的执行流程
    • 运行 php artisan migrate 执行迁移。
    • 运行 php artisan migrate:rollback 撤销迁移。

7. 为什么使用迁移?

  • 版本控制:迁移文件可以被提交到 Git 等版本控制系统中,方便团队协作。
  • 跨环境同步:可以在开发、测试和生产环境中轻松同步数据库结构。
  • 自动化操作:避免手动操作数据库工具,减少出错的可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值