2017-07-07 53 views
1

我遇到問題,需要將舊錶遷移到新表。舊錶的數據例子是這樣的:將舊錶遷移到laravel中的新表中

舊錶(離開表)

標識    USER_ID    原因   日期
             發燒        29/01/2013
             發熱        30/01/2013
             發熱        31/01/2013
             發燒        2013年1月2日

新表(離開表)

標識    USER_ID    原因   開始日期   結束日期
             發熱        29/01/2013       2013年1月2日


是否有任何方式在那裏我可以迭代舊錶和存儲新表。

29/01/2013 - 01/02/2013產生4行..新表需要1行開始日期和結束日期其中29/01/2013是開始日期和01/02/2013結束日期

我已經創建了新表。我只是想迭代舊錶的列表,並將其插入到具有開始日期和結束日期的新表中。

+0

日期列將去什麼開始日期或結束日期或兩者或沒有? –

+0

29/01/2013 - 01/02/2013產生4行..新表需要1行開始日期和結束日期,其中29/01/2013是開始日期和01/02/2013是結束日期 – SeedCom

回答

0

您可以將Date列重命名爲Start Date並添加新的列End Date這樣,

Schema::table('users', function($table) 
{ 
    $table->renameColumn('Date', 'Start Date'); 
    $table->dateTime('End Date'); 
}); 
+0

新表我已經創建。我只是想迭代舊錶的列表,並將其插入到具有開始日期和結束日期的新表中。 – SeedCom

+0

爲什麼不只是更改舊錶? –

+0

@KrisRoofe - 問題的一部分是填充新列! –

0
INSERT INTO new_table 
    (user_id, reason, start_date, end_date) 
    SELECT user_id, reason 
      MIN(Date), MAX(Date) 
     FROM old_table 
     GROUP BY user_id, reason; 

我離開了ID,假定它是AUTO_INCREMENT。但是PRIMARY KEY(user_id, reason)可能更有意義。

你沒有說原始行是'連續的',你也沒有說過同一個用戶可以或不能有多個相同的字符串reason。所以,也許我沒有解決真正的問題。在這種情況下,編輯您的問題更加精確。