Laravel生成迁移

在上一个主题中, 我们获得了laravel项目中已经可用的迁移知识。现在, 我们将学习如何生成自己的迁移。
生成迁移的步骤 以下是生成迁移的步骤:

  • 打开Git bash窗口, 然后键入以下命令:’ php artisan make:migration create_posts_table– create =“ posts”
Laravel生成迁移

文章图片
【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窗口以运行migration命令。
Laravel生成迁移

文章图片
上面的命令在数据库中创建迁移表。
打开phpmyadmin查看迁移表。
Laravel生成迁移

文章图片
上面的输出显示迁移已创建, 还有“ posts”表。
“职位”表的结构如下所示:
Laravel生成迁移

文章图片
使用迁移将列添加到现有表
我想在已经创建的表中添加新列。我不想回到创建该表的文件, 删除该表, 然后重新创建该表, 然后重新迁移它。因此, 我将创建一个新的迁移文件, 将新列添加到现有表中。
以下是将列添加到现有表中的步骤:
  • 打开Git bash窗口, 然后输入以下命令:php artisan make:migration add_column_admin_is_to_table -table =“ posts”其中add_column_admin_is_to_table是迁移文件的名称, 而-table =“ posts”是告知laravel我们是与职位表一起使用。
Laravel生成迁移

文章图片
  • 迁移文件在xampp / htdocs / firstproject / database / migrations目录中创建, 其中firstproject是laravel项目的名称。
Laravel生成迁移

文章图片
  • 打开迁移文件, 新创建的迁移文件的结构如下所示:
< ?phpuse 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 (Blueprint $table) {//}); }}

  • 我们在up()方法中添加以下代码:
public function up(){Schema::table('posts', function (Blueprint $table) {$table-> integer('is_admin')-> unsigned(); }); }

上面的代码显示我们正在将新列即is_admin添加到posts表。
  • 在Git bash窗口中输入migration命令, 即php artisan migration。
Laravel生成迁移

文章图片
  • 打开phpMyAdmin以查看“帖子”表的结构。
Laravel生成迁移

文章图片
在上面的输出中, 我们观察到新列即is_admin已创建, 并且整数的类型是无符号的。无符号整数表示此列不包含任何负数。
  • 如果我们想对该列进行一些修改, 那么首先, 我们需要回滚迁移。该命令是php artisan migrate:rollback。
Laravel生成迁移

文章图片
  • 当我们回滚迁移时, “职位”结构的结构看起来像:
Laravel生成迁移

文章图片
上面的输出显示is_admin列已从表中删除。
  • 假设我要向is_admin列提供默认值, 则可以按照以下步骤进行操作:
public function up(){Schema::table('posts', function (Blueprint $table) {$table-> integer('is_admin')-> default('0'); }); }

  • 要将is_admin列再次以默认值0添加到posts表中, 请运行migration命令。
Laravel生成迁移

文章图片
  • 打开phpMyAdmin。
Laravel生成迁移

文章图片
上面的输出显示is_admin列已添加到posts表中, 默认值为0。

    推荐阅读