如何使用Laravel迁移(migrations)?

3
我正在使用PHP的Laravel框架进行开发。我想使用迁移来创建和操作表格。以下是我所采取的步骤:
  1. 我使用命令php artisan migrate:make create_users_table创建了一个迁移,它创建了一个迁移文件,并在其up函数中编写了我的模式,然后我运行它,它成功执行。

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

  3. 然后我尝试使用回滚函数,但它显示“无需回滚”的错误。

    那么,如何回滚该迁移或执行迁移的下函数?此外,当我创建新的迁移时,在迁移文件的up函数中,我编写了删除早期迁移创建的表格的代码,并使用命令php artisan migrate进行执行,这将执行所有迁移(包括我之前的迁移),并显示“表已经存在”的错误(很明显)。

因此,我陷入了困境,有没有一个函数可以执行特定的迁移?我该怎么做?


运行 'composer dump-autoload',然后再尝试一次,如果回滚不起作用,请使用 artisan migrate:reset(它会回滚所有迁移)。 - Jarek Tkaczyk
我需要每次创建迁移文件并编写其up函数来进行每个更改、创建新表或列吗?使用迁移是否必要?为什么要使用迁移? - Sahil
迁移非常有用,它们就像代码的版本控制一样是数据库的版本控制,就像git/svn对于代码一样。如果你想要改变某些东西,你可以创建一个新文件,除非你只有一个迁移文件并且希望简单地重写它。按照Jason告诉你的那样,在一个迁移文件中同时放置UP和DOWN操作。 - Jarek Tkaczyk
2个回答

2

当您使用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');
}

2
我想运行特定迁移的下降函数,该如何操作?在那个特定的迁移之后,我运行了另外几个我想要保留的迁移,那么如何运行下降函数? - Sahil

0

在 Laravel 中创建一个迁移时,每个迁移都包括两种方法:'up()' 和 'down()'。

+) 当您运行命令 'php artisan migrate' 时,将执行 up() 方法。

+) 当您想要回到运行命令 "php artisan migrate" 之前的状态时,将执行 down() 方法。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接