Laravel 生成迁移

Laravel 生成迁移

在前一个主题中,我们已经获得了Laravel项目中已经可用的迁移的知识。现在,我们将学习如何生成我们自己的迁移。

生成迁移的步骤

以下是生成迁移的步骤:

  • 打开Git bash窗口并输入下面的命令:php artisan make:migration create_posts_table --create="posts"

Laravel 生成迁移

上面的输出说明迁移表的名称为 ” create_posts_table “。”-create=”posts”” 是用于创建表的参数,表名为 ” posts “。我们遵循与 Laravel 默认迁移表相同的规则来命名迁移表。

  • 要查看迁移表,请打开目录 ” C:\xampp\htdocs\firstprojectproject\database\migrations “。

Laravel 生成迁移

上面的输出显示名字为“ create_posts_table ”的迁移表已成功创建。

  • 打开迁移文件,该文件的结构如下:
class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
            Schema::create('posts', function (Blueprint table) {table->bigIncrements('id');
            $table->timestamps();
        });
    }

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

上述代码是新生成的类,其中包含两个方法,即 up() 方法和 down() 方法。up()方法实现了create()方法,该方法包含两个参数,即表名(posts)和闭包函数。闭包函数包含Blueprint类,其对象$table作为参数。Laravel创建了两个列;第一列是自增列,名称为’id’,第二列是timestamp类型。

假设我在下面的代码中添加了另外两列:

public function up()
    {
        Schema::create('posts', function (Blueprint table) {table->bigIncrements('id');
            table->string('title')->unique();table->text('body');
            $table->timestamps();
        }); }   

现在我们将进行迁移,以运行上述代码。打开Git Bash窗口来运行迁移命令。

Laravel 生成迁移

上述命令在数据库中创建了迁移表。

打开 phpmyadmin 查看迁移表。

Laravel 生成迁移

向现有表格中添加列使用迁移

我想向已经创建的表格中添加新的列。我不想回到创建表格的文件,删除表格,然后重新创建表格并重新进行迁移。所以,我将创建一个新的迁移文件,向现有表格中添加新的列。

以下是向现有表格添加列的步骤:

  • 打开Git bash窗口,并输入以下命令: php artisan make:migration add_column_admin_is_to_table -table=”posts” ,其中 add_column_admin_is_to_table 是迁移文件的名称,-table=”posts” 是告诉laravel我们正在使用 posts 表格的标志。

Laravel 生成迁移

  • 移植文件创建在 xampp/htdocs/firstproject/database/migrations 目录中,其中firstproject是laravel项目的名称。

Laravel 生成迁移

  • 打开迁移文件,新创建的迁移文件的结构如下:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddColumnAdminIsToTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('posts', function (Blueprint table) {
            //
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('posts', function (Blueprinttable) {
            //
        });
    }
}
  • 我们在 up() 方法中添加以下代码:
  public function up()
    {
        Schema::table('posts', function (Blueprint table) {table->integer('is_admin')->unsigned();
        });
    }

上面的代码显示我们正在向文章表中添加新的列,即 is_admin

  • 在Git bash窗口中输入迁移命令,即 php artisan migrate

Laravel 生成迁移

  • 打开 phpMyAdmin 查看 ‘ posts ‘ 表的结构。

Laravel 生成迁移

在上面的输出中,我们观察到新的列,即 is_admin 被创建,并且整数的类型是无符号的。无符号整数意味着该列不包含任何负数。

  • 如果我们想对这个列进行一些修改,那么首先需要回滚迁移。命令是 php artisan migrate:rollback

Laravel 生成迁移

  • 当我们回滚迁移时,’posts’ 的结构将如下所示:

Laravel 生成迁移

上述输出显示表中的 is_admin 列已被删除。

  • 假设我想为 is_admin 列提供默认值,可以按如下方式完成:
public function up()
    {
        Schema::table('posts', function (Blueprint table) {table->integer('is_admin')->default('0');
        });
    }
  • 要再次向posts表添加 is_admin 列,并将默认值设为0,请运行迁移命令。

Laravel 生成迁移

  • 打开 phpMyAdmin

Laravel 生成迁移

以上输出显示,”is_admin”列被添加到帖子表中,该列的默认值为0。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程