2016-02-26 63 views
0

我正在計劃對我的數據庫進行重大更改,這需要一組SQL指令(可能還有一個非SQL腳本),以便將舊數據容納到新模式中。我應該如何操作Laravel數據庫遷移數據?或者我應該在別的地方去做嗎?

現在,是它操縱在遷移腳本數據是個好主意?或者它只是用於模式(DB結構)更改?

+0

遷移可以使用,但是......我會建議不要有很大變化遷移。如果PHP代碼超時會發生什麼?如果你的內存不足,該怎麼辦?相反,保持您的原始數據庫。複製/創建一個您可以更改的全新環境。您可能能夠將用戶轉發到新網站或更改DNS記錄。如果出現問題,您需要能夠恢復。有一個備份計劃! – jjwdesign

+0

@jjwdesign好點。但是,這是我爲不超時設置的CLI腳本,此遷移將在我當前的數據集上運行,該數據集當時非常小。儘管數據庫正在增長(而這一系列變化是由於增長)。 – Mauro

回答

0

數據操作不進行遷移的事情。由於自然遷徙的作品。我會建議使用遷移來僅定義數據庫模式。

由Laravel逐個執行遷移,按照它們創建的確切順序執行,因此它可以跟蹤執行和執行順序 ref。安東尼奧卡洛斯里貝羅。

這阻止一個人分管,他/她要運行的類或文件。例如,您可以選擇在部門表之前播種用戶表,在另一種意義上,您可以選擇反之亦然。移民並不具備這種自由。

及數據的處理,我會建議你使用播種機來處理,因爲你可以選擇在任何時間點運行的類使用

PHP工匠DB:種子--class =類名

由於這個名字就是種子。含義填充數據庫。考慮遷移時

0

兩個問題是很重要的。

  1. 速度:PHP通常有一個暫停。當您的遷移完成1/2時會發生什麼?
  2. 將來運行:如果您在幾個月內運行此遷移,您的應用代碼可能會有所不同。

原始查詢有助於這兩個問題。

$elements = DB::Select(DB::Raw('SELECT element_id FROM record GROUP BY element_id')); 

foreach ($elements as $element) 
{ 
    DB::Statement(' 
     INSERT INTO account (created_at, updated_at, name, element_id) 
     VALUES (NOW(), NOW(), "Migrated account", '. $element->element_id .') 
    '); 
} 
相關問題