2017-07-15 49 views
1

我在數據庫中有88個表,並且每個表中需要一個新列一個解決方案是我爲所有表進行遷移並編寫88個函數添加新列以及刪除該列。如何獲得laravel中的所有模型/遷移名稱並添加單個新列

enter image description here

有沒有什麼辦法讓在1個變量中的所有表名,然後使用foreach由整塊的代碼添加新列?

  1. 得到可變

  2. 所有的表名由foreach環新列添加到特定變量

$allTables=? 
foreach($allTables as $singleTable){ 
    add new column 
} 

但如何? 我想在所有表格中添加team_id,但我需要一個最佳解決方案。

我正在使用laravel 5.4版本。

回答

2

請嘗試以下操作。

// Get the default database name 
$dbName = config('database.connections.' . config('database.default') . '.database'); 

$tables = DB::select('SHOW TABLES'); 

foreach($tables as $table) 
{ 
    Schema::table($table->{'Tables_in_' . $dbName}, function($table) { 
     // Add the column 
     $table->string('some_column'); 
    }); 
} 

要理解分析$表變量時發生了什麼,但應該非常簡單。

+1

這對我很好,對我很好,謝謝你的回覆愛你<3 –

1

我試過這個,它也在工作,但your solution比那個更好,@Artur。

class AddTeamIdToNecessaryTables extends Migration 
{ 
    protected $table_names; 

    function __construct() 
    { 
     $this->table_names = [ 
      'accounts', 'suppliers', 'expenses', 'draft_invoices', 'quote_jobs', 
      'committed_invoices', 'quotes', 'rate_plans', 'call_categories', 
      'prefix_groups', 'draft_items', 'committed_invoice_cdrs', 'committed_items', 
      'call_data_records', 'committed_temp_xero_infos', 'did_records', 
      'prefixes', 'prefix_cost_prices', 'purchase_items', 'purchase_orders', 
      'quote_costs', 'sippy_root_accounts', 'temp_xero_infos', 'sippy_infos', 'committed_jobs' 
     ]; 
    } 

    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     \DB::beginTransaction(); 
     try { 
      foreach ($this->table_names as $table_name) { 
       Schema::table($table_name, function (Blueprint $table) { 
        $table->integer('team_id')->unsigned()->nullable()->after('id'); 
        $table->foreign('team_id')->references('id')->on('teams'); 
       }); 
      } 
      \DB::commit(); 
     } catch (\Exception $e) { 
      \DB::rollback(); 
     } 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     \DB::beginTransaction(); 
     try { 
      foreach ($this->table_names as $table_name){ 
       Schema::table($table_name, function (Blueprint $table) { 
        $table->dropForeign(['team_id']); 
        $table->dropColumn('team_id'); 
       }); 
      } 
      \DB::commit(); 
     } catch (\Exception $e) { 
      \DB::rollback(); 
     } 
    } 
} 
相關問題