在你的應用程序的開發,我不認爲你應該太在意其每遷移只有一張桌子,有時它只是更容易有一些表togheter在一個單一的遷移,但只要你的系統中去到生產,你將無法繼續這樣工作,因爲你只能在生產環境中遷移,而且可能永遠不會回滾,所以你的遷移將會非常小,有時你會爲單個列的創建進行遷移。
將表格放在不同遷移中的優點與具有薄類別相同,您在一個文件中擁有的信息越少,管理和更改就越容易。因此,如果您將所有表格都放在一個遷移中,則維護起來會更困難,但這真的取決於您。
外鍵是爲什麼您應該爲每個表甚至每個外鍵創建一個遷移的好例子:每次您回滾與外鍵相關的表時,必須先刪除所有外鍵依賴關係,這就是爲什麼Laravel創建遷移他們都在相同的順序,它可以幫助你永遠不會擰表下降。所以,首先創建你的表遷移,然後創建你的外鍵遷移,所以當你回滾時它將首先回滾約束,然後回滾表。
我在該表的相同遷移中爲表創建外鍵,除非我有太多的交叉外鍵。但是,我總是創建一個單獨的Schema::table()
命令外鍵,因爲某些數據庫需要你的限制連接到它之前有柱:
public function up()
{
Schema::create('statuses', function(Blueprint $table)
{
$table->string('id', 64)->primary();
$table->string('user_id', 64)->index();
$table->text('body');
$table->timestamps();
});
Schema::table('statuses', function(Blueprint $table)
{
$table->foreign('user_id')
->references('id')
->on('users')
->onUpdate('cascade')
->onDelete('cascade');
});
}
關於多對多的,如果你創建togheter表和外鍵,你應該首先創建主數據庫,然後創建數據透視表,但是如果要在單獨的遷移中創建外鍵,首先創建表(順序無關緊要,但最好在這些情況下組織),然後外鍵的遷移。
在開發過程中我做了很多在我的表的變化,所以我總是回來給他們,所以這是我用來做什麼,當我改變遷移:
1)php artisan migrate:reset
多次
2)改變遷移
3)php artisan migrate
如果我只是創造一個新的,平時我不會有任何問題,因爲移民通常是idepotent。
你的最後一個問題已經回答了,但我再說一遍:Laravel名稱使用時間戳的遷移文件中,這樣你就永遠不會有一個遷移之前,另一個之前創建正在運行:
2014_07_16_190821_create_statuses_table
和遷移問題的名字,因爲這一塊上面將創建這個類:
CreateStatusesTable
這麼一件事你必須做的是創造一個不同的名稱每遷移,否則你將最終有兩個班,同名,而不是Laravel,但PHP會投訴它。
非常感謝您的解釋。它非常有幫助。是的,我完全理解一旦應用程序在生產中需要進行小的增量更改。我不確定大部分表格的最初基礎創建是如何讓我走的。但是,考慮到時間戳實際上強制執行遷移的順序(我錯過了),我想我不應該擔心由於不存在的表而不會創建關係。再次感謝! – jbx 2014-09-25 00:29:05
終於有一些很好的實用laravel信息。他們的教程和文檔是真實的,但它通常包含基本用例,而不是嚴格編程所需的東西。 – Srneczek 2015-06-03 12:32:43
非常好的答案我認爲這是事實,但我很高興你已經證實了它,它爲什麼有意義,但我可以看到爲什麼OP問這個問題,因爲我想知道同樣的問題。 – rosscooper 2016-04-12 23:12:40