2016-09-06 63 views
0

我一直認爲遷移是創建/改變表格的結構。但是,我需要更新我們的實時數據庫中的值。遷移是否是正確的方式 - 或者我應該運行自己的SQL?應該使用Laravel遷移來更改實時列值嗎?

+0

也許種子? https://laravel.com/docs/5.3/seeding#writing-seeders – rad11

+1

@ rad11我原本以爲 - 但在文檔中,它特別聲明種子是爲_test_數據。這就是爲什麼我認爲移民更容易。你怎麼看? – Shane

+0

種子用於測試或「默認」數據,並且遷移是針對結構的,因此從我的角度來看,您應該運行自己的sql請求 – sam12

回答

1

遷移只應用於數據庫模式。播種機只能用於測試數據。如果您要更改記錄的實際內容,則應該使用代碼手動執行此操作,或者使用您自己的SQL執行此操作。

從Laravel文檔:

在播種https://laravel.com/docs/5.3/seeding

Laravel包括使用種子類測試數據播種數據庫的一個簡單方法。

在遷移https://laravel.com/docs/5.3/migrations

遷移就像版本控制你的數據庫,讓你的團隊可以輕鬆地修改和共享應用程序的數據庫模式。

+0

儘管如此,聽起來並不像它將成爲測試數據。我認爲在某些情況下,對現有行的自動更新不合適。例如,如果您將用戶密碼設置爲'可空',那麼將'UPDATE users SET password = NULL'(其中password =''')放在遷移中可能是適當的。 – ceejayoz

0

種子的一種優雅的方式是使用Laravel的Excel - http://www.maatwebsite.nl/laravel-excel/docs

一個例子就是這個(運行中的功能)

 Excel::load(database_path('seeds/csv/your_seed_info.csv'), function($reader) { 

     // Getting all results 
      $results = $reader->get(); 

      foreach ($results as $item) { 
      $comp = Model::create([ 

       'field1' => $item->field1, 
       'field2' => $item->field2, 
        .... 
       'fieldn' => $item->fieldn, 
      ]); 
     } 

     }); 

確保把這個頂部 use Maatwebsite\Excel\Facades\Excel;

0

這是一個有點基於意見,但我認爲一些更新到現有行適合於遷移。舉個例子:

Schema::table('users', function($table) { 
    // make passwords nullable for folks who use SSO 
    $table->string('password')->nullable()->change(); 
}); 

User::where('password', '')->update(['password' => NULL]); 

因爲遷移需要調整任何現有數據,以適應新的模式這將是適當的。這是遷移的一部分 - 播種機沒有意義,手動查詢可能會被其他開發人員或特定環境忽略/遺忘。