如何在 laravel 中获取所有 models/migrations 名称并添加单个新列

How to get all models/migrations names in laravel and add single new column

我在数据库中有 88 个 table,每个 table 都需要一个新列,一个解决方案是我进行迁移并为所有 table 编写 88 个函数s 添加新列以及 88 删除该列。

有什么方法可以将所有 table 名称都放在一个变量中,然后使用 foreach 通过一段代码添加一个新列吗?

  1. 获取变量中的所有table名称

  2. 通过foreach循环向该特定变量添加新列

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

但是怎么做呢? 我想在所有 table 中添加 team_id,但我需要一个最佳解决方案。

我正在使用 laravel 5.4 版本。

试试下面的方法。

// 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');
    });
}

要了解发生了什么,请分析 $tables 变量,但应该非常简单。

我已经试过了,它也有效,但 比那个更好,@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();
        }
    }
}