2014-04-11 62 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後自動回滾。