13

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

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

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

4

3 回答 3

17

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

有了迁移,你不需要在 phpMyAdmin 中创建表,你可以在 Laravel 中完成。以下是创建用户表的示例:

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');
    }

}

在这段代码中,我们使用“name”、“lastname”等字段创建表......我们在 Laravel 代码中说过,迁移完成后它们是字符串类型,我们在数据库中有完整的表和这些字段。

运行迁移以创建表

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

php artisan make:migration create_users_table

或者

php artisan make:migration create_users_table --create=users

运行迁移以更改表

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

php artisan make:migration add_votes_to_users_table --table=users

回滚上一次迁移操作

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

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 基础系列,在第 7 集中你可以听到更多关于迁移的信息。

于 2015-05-13T16:39:12.643 回答
3

迁移的简单解释:

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

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

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

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

假设稍后,您意识到在创建最后一次迁移时您搞砸了。你已经运行了它,所以你的数据库已经改变了。你怎么修?好吧,如果您正确编写了迁移并实现了该down方法,您就可以这样做php artisan migrate:rollback,它将回滚迁移。

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

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

查看artisan带有 的命令列表php artisan。您还可以使用 请求有关特定命令的帮助php artisan help <command>

于 2015-05-13T16:34:04.470 回答
3

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

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

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

于 2015-05-13T16:40:25.550 回答