2014-04-11 64 views
3

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

  1. 我创建命令php artisan migrate:make create_users_table,它创建一个迁移文件,并在其上方功能的迁移,我写下了我的架构,然后我跑了它,它得到了成功执行。

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

  3. 然后我试着使用回滚函数,但它给出错误'没有回滚'。

    那么,如何回滚该迁移或执行迁移功能。另外,当我创建新的迁移和迁移文件的启动功能时,我编写了由我的早期迁移创建的删除表的代码,并使用命令php artisan migrate执行,通过执行所有迁移(也是我之前的迁移)并向我显示错误, '表已经存在'(显而易见)。

所以,现在我卡住了,是否有执行特殊/特殊迁移的功能?我该怎么做呢?

+0

运行'composer dump-autoload'然后再试一次,artisan migrate:如果回滚不起作用会重置(它会回滚所有的迁移) –

+0

我需要每次创建一个迁移文件并在每次更改时写入它的up函数或者创建新的表或列,是否有必要使用迁移以及它们甚至被使用的原因? – user3522412

+0

迁移非常有用,它们是数据库的版本控制,如git/svn代码。如果您想更改某些内容,则可以创建新文件,除非您有单个迁移文件并且希望简单地重写它。像杰森告诉你的一样,把UP和DOWN放在一个迁移文件中 –

回答

3

当您使用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

我想要运行特定迁移的功能,该怎么做。在特定的迁移之后,我又跑了一些我想保留的迁移,所以如何运行drop函数 – user3522412

0

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

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

+)down()方法将在您运行命令“php artisan migrate”之前返回状态时被执行。

你可以尝试一下命令:'php artisan migrate:refresh'来回滚所有的迁移,并在执行命令'php artisan migrate'auto后自动回滚。