【问题标题】:How to use laravel migrations如何使用 laravel 迁移
【发布时间】:2014-05-25 11:09:12
【问题描述】:

我正在使用 php 的 Laravel 框架进行开发。我想使用迁移进行表创建操作。这些是我采取的步骤:

  1. 我使用命令 php artisan migrate:make create_users_table 创建迁移,该命令创建了一个迁移文件,并在其 up 函数中写下我的架构,然后运行它并成功执行。

  2. 之后,我再次尝试运行相同的迁移,结果显示错误,“表存在”。

  3. 然后我尝试使用回滚功能,但它给出了错误“没有什么可以回滚”。

    那么,如何回滚迁移或执行迁移的向下功能。此外,当我创建新迁移并在迁移文件的 up 函数中,我编写了用于删除由我之前的迁移创建的表的代码,并使用命令 php artisan migrate 执行,由此所有迁移都被执行(也是我之前的迁移)并向我展示了错误,“表已存在”(很明显)。

那么,现在我被困住了,是否有执行特殊/特定迁移的功能?我该怎么做?

【问题讨论】:

  • 运行 'composer dump-autoload' 然后再试一次,工匠 migrate:reset 如果回滚不起作用(它将回滚所有迁移)
  • 我是否需要每次都创建一个迁移文件并在每次更改或创建新表或列时写入其 up 函数,是否有必要使用迁移以及为什么要使用它们?
  • 迁移非常有用,它们是数据库的版本控制,就像代码的 git/svn 一样。如果您想更改某些内容,则创建新文件,除非您有单个迁移文件并希望简单地重写它。按照 Jason 告诉您的操作,将 UP 和 DOWN 放在一个迁移文件中

标签: php laravel migration


【解决方案1】:

当您使用 artisan migrate:make 创建迁移时,您应该编写 updown 方法。 down 方法的作用应该与 up 方法的作用相反。

public function up()
{
    Schema::create('users', function($table)
    {
        $table->increments('id');
        $table->string('username');
    });
}

public function down()
{
    // We DROP the table because we created it in the "up" method.
    Schema::drop('users');
}

在我看来,您的 up 方法中有一些不属于那里的代码,尽管如果没有看到您的代码,这很难说。我建议你清除我们的migrations 表(可能有也可能没有任何记录)。您还需要手动删除通过迁移创建的表。然后你就可以重新开始了。

请记住,您也可以使用 dropIfExists 仅在表存在时删除它。

public function down()
{
    // Drop the table only if it exists.
    Schema::dropIfExists('users');
}

【讨论】:

  • 我想运行特定迁移的功能,怎么做。在那次特定迁移之后,我又运行了几个我想保留的迁移,那么如何运行 drop 功能
【解决方案2】:

当您在 laravel 中创建 1 个迁移时,每个迁移包括 2 个方法:'up()' 和 'down()'。

+) up() 方法会在你运行命令'php artisan migrate'时被执行。

+) down() 方法会在你恢复运行命令“php artisan migrate”之前的状态时被执行。

您可以尝试执行命令:'php artisan migrate:refresh' 来回滚所有迁移,并在执行命令 'php artisan migrate' auto 之后回滚。

【讨论】:

    猜你喜欢
    • 2016-05-30
    • 2018-11-10
    • 1970-01-01
    • 2016-03-11
    • 2019-12-27
    • 2018-04-18
    • 2018-03-09
    相关资源
    最近更新 更多