2012-11-21 87 views
16

我使用laravel(Laravel 4)設置了一個新應用程序,並且通過遷移設置數據庫時遇到了一些問題。如何在laravel運行特定環境的遷移

我做了一個遷移文件,:

artisan migrate:make --table="jobs" --create jobs 

預期這創造數據庫/遷移的文件時,我做了一些MODS的這一點,就用火起來

artisan migrate --env=local 

但我得到"Nothing to migrate"

的回覆如果我嘗試運行沒有--env=local,它使用配置文件夾中的database.php(不在本地/分段/生產文件夾),我們不想使用它,因爲它不會特定於環境。

我的第一個想法是確定的,也許我需要把env標誌放在migrate:make調用中,所以我嘗試了這個,但得到一個錯誤,說它無法創建遷移文件。然後,我認爲基於env的遷移無論如何都是沒有意義的......它們應該被創建爲通用的,並且只是在每個env的基礎上運行,所以最終所有環境都使用相同的遷移腳本。

所以我現在有點粘在哪裏去從這裏

回答

21

你需要指定遷移命令之前的環境。

artisan --env=local migrate 

運行artisan help您顯示哪些命令遵循格式。

artisan help 

Usage: 
    [options] command [arguments] 
+0

可悲的是,這並沒有影響......仍然得到'沒什麼遷移'消息 – duellsy

+0

那麼,根據你的幫助,你如何指定選項。看看'artisan help',你會看到它的格式是[options] command [arguments]'。我現在的建議是確保您的環境都設置正確。我剛剛檢查過,它對我來說工作正常。所以你錯過了別的。 –

+0

這不行。 – gandra404

1

如果在運行後修改遷移,則首先需要回滾遷移。

php artisan migrate:rollback 

繼續運行,直到您更改的遷移回滾。或者,你可以用

php artisan migrate:reset 

重置您的整個模式,但那麼你就需要打電話給你的遷移像正常給他們帶來最新的。

php artisan migrate 

最後,你可以重置,然後通過調用

php artisan rebuild 

遷移還要注意,一般不好的做法,他們已經作出後,除非你真的只是做它來修改你的遷移。一旦部署完成,您不應修改它,而應創建一個新的遷移文件。

希望這會有所幫助。

編輯:我不知何故錯過了Laravel 4指標。我相信大多數這些命令仍然有效,但您可能需要進行調整。

+0

對不起,當我說「提出了一些mods」時,我只是打開剛生成的遷移文件,並將其添加到我的遷移代碼中。我沒有編輯已經運行的遷移。這是此項目的首次遷移 – duellsy

+0

也可以使用 php artisan migrate拆除和重建一個突擊隊中的遷移:刷新 – Atheist

3

已解決。

解決方案只是編輯local/database.php(或生產/數據庫。PHP等),從而確保遷移路徑變量指向一個migrate:make是創建遷移文件的位置,只是改變

'application' => __DIR__.'/../database/migrations', 

'application' => DIR.'/../../database/migrations', 
0

我想出了一個解決方案來運行migrate爲不同的數據庫基本上,命令artisan migrate --env=local不起作用。但我們可以在config\database.php中定義一個新的連接字符串。例如:

<?php 
    'mysql_testing' => [ 
     'driver' => 'mysql', 
     'host'  => env('DB_TESTING_HOST'), 
     'database' => env('DB_TESTING_DATABASE'), 
     'username' => env('DB_TESTING_USERNAME'), 
     'password' => env('DB_TESTING_PASSWORD'), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => 'prefix_', 
    ], 

,並指定--database當我們運行artisan migrate這樣的:

php artisan migrate --database=mysql_testing 

希望這有助於:)