Laravel 迁移如何工作?

How do Laravel migrations work?

我对这种类型的框架完全陌生。我来自准系统 PHP 开发,我似乎无法找到一个易于理解的指南来指导迁移的实际作用。

我正在尝试创建一个已有数据库的项目。我用过这个:https://github.com/Xethron/migrations-generator[1] 但是通过迁移对模式进行更改似乎会吐出错误,这意味着我不知道我在做什么。

我真的需要一个简单的 运行 了解迁移的实际作用、它们如何影响数据库以及您认为对初学者有帮助的任何其他内容。

迁移的简单解释:

它们是您的数据库方案的版本控制系统。

假设您正在设置一个新的应用程序。您要做的第一件事是创建一个包含几列的 table(称之为 mytable)。这将是您的第一次迁移。当您开始处理您的应用程序时,您 运行 迁移 (php artisan migrate) 并且 voila!您的数据库中有一个新的 table。

一段时间后,您决定 table 中需要一个新列。您创建了一个迁移(Laravel 5 中的 php artisan make:migration),并为您创建了一个新的迁移文件。您更新该迁移中的代码,再次 运行 php artisan migrate,并且您的 table.

中有一个新列

好的,这就是迁移背后的基本思想。但还有更多...

假设您稍后发现在创建最后一次迁移时搞砸了。你已经 运行 它了,所以你的数据库已经改变了。你如何解决它?好吧,如果您正确编写了迁移并实施了 down 方法,您只需执行 php artisan migrate:rollback 即可回滚迁移。

Laravel 是怎么做到的?通过在特殊数据库 table 中跟踪您的迁移。 php artisan migrate:install 命令将为您进行设置,以便 Laravel 可以管理这些迁移。

随着时间的推移,随着应用程序的增长,您将添加越来越多的迁移。 Laravel 为您提供了一种根据需要前进和后退迁移的方法,以确保您的数据库在您工作时处于您需要的任何状态。

使用 php artisan 查看 artisan 命令列表。您还可以使用 php artisan help <command>.

请求有关特定命令的帮助

迁移是数据库的一种版本控制。它们允许团队修改数据库模式并保持最新的当前模式状态。迁移通常与 Schema Builder 配对以轻松管理应用程序的架构。

对于迁移,您不需要在 phpMyAdmin 中创建 table,您可以在 Laravel 中创建。这是创建用户 table:

的示例
class CreateUsersTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function(Blueprint $table)
        {
            $table->increments('id'); // autoincrement id field
            $table->string('name');   // string field
            $table->string('lastname');
            $table->string('title');
            $table->string('email')->unique();   // unique string field
            $table->string('password', 60);      // string field with max 60 characters
            $table->boolean('Status')->default(0); // string field with default value 0
            $table->timestamps();

        });
    }


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

}

我在这段代码中创建了 table,其中包含 "name"、"lastname" 等字段...我们在 Laravel 代码中说过,迁移完成后它们是字符串类型我们在数据库中有完整的 table 和这些字段。

运行 要创建的迁移 table

要创建迁移,您可以在 Artisan CLI(Artisan 命令行界面)上使用 make:migration 命令:

php artisan make:migration create_users_table

php artisan make:migration create_users_table --create=users

运行 迁移以改变 table

当您需要在数据库中进行一些更改时 table 示例:向用户 table 添加字段投票 您可以在 Laravel 代码中这样做而无需触及 SQL代码

php artisan make:migration add_votes_to_users_table --table=users

回滚上次迁移操作

如果您犯了错误或做错了什么,您可以随时回滚到 return 以前状态的数据库。

php artisan migrate:rollback

回滚所有迁移

php artisan migrate:reset

回滚所有迁移并运行再次全部迁移

php artisan migrate:refresh

php artisan migrate:refresh --seed

迁移的最大优势之一是在不接触 SQL 代码的情况下创建数据库。您可以在 PHP 代码中创建具有关系的整个数据库,然后将其迁移到 MySQL、PL/SQL、MSSQL 或任何其他数据库。

我也推荐免费的 Laravel 5 fundamental series,在第 7 集中你可以听到更多关于迁移的信息。

假设您正在与其他开发人员一起开发一个项目。随着开发者添加越来越多的功能,他们也需要添加越来越多的表、列、删除列、更改列数据类型等...

这很容易失控。如果您错过了一位开发人员的某些 SQL,则另一位开发人员的 SQL 可能无法正常工作。试图对一堆 sql 文件进行分类以找出您错过了哪些文件也可能会浪费大量时间。开发团队中的每个人都在使用不同的数据库或者上帝保佑,有人破坏了生产数据库,这只是时间问题。使用迁移,您只需要在命令行中 运行 php artisan migrate,数据库的所有更改都会为您处理。

这基本上就是为什么迁移有用的原因我不打算深入探讨它们如何工作的基础知识,因为 Kryten 已经在这里写了一篇很好的文章。