Laravel data migrations

后端 未结 1 1145
有刺的猬
有刺的猬 2020-12-31 03:54

Is there a way to make data migrations in Laravel? I\'ve found some instructions on how to seed the database, but it doesn\'t cover cases where I need to sp

相关标签:
1条回答
  • 2020-12-31 04:56

    Laravel has migrations built in :) http://laravel.com/docs/migrations

    Simply run

    php artisan make:migration migration_name_here
    

    and it will create a migration under app/database/migrations. You could then use Laravel's database classes in your up() and down() methods.

    Let's use this as an example...

    class SplitColumn extends Migration {
    
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::table('table_name', function($table)
            {
                // Create new columns for table_name (1 column split into 2).
                $table->string('new_column');
                $table->string('new_column_b');
            });
    
            // Get records from old column.
            $results = DB::table('table_name')->select('old_column')->get();
    
            // Loop through the results of the old column, split the values.
            // For example, let's say you have to explode a |.
            foreach($results as $result)
            {
                $split_value = explode("|", $result->old_column);
    
                // Insert the split values into new columns.
                DB::table('table_name')->insert([
                    "new_column"    =>  $split_value[0],
                    "new_column_b"  =>  $split_value[1]
                ]);
            }
    
            // Delete old column.
            Schema::table('table_name', function($table)
            {
                $table->dropColumn('old_column');
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::table('table_name', function($table)
            {
                // Re-create the old column.
                $table->string('old_column');
            });
    
            // Get records from old column.
            $results = DB::table('table_name')->select('new_column', 'new_column_b')->get();
    
            // Loop through the results of the new columns and merge them.
            foreach($results as $result)
            {
                $merged_value = implode("|", [$result->new_column, $result->new_column_b]);
    
                // Insert the split values into re-made old column.
                DB::table('table_name')->insert([
                    "old_column"    =>  $merged_value
                ]);
            }
    
            // Delete new columns.
            Schema::table('table_name', function($table)
            {
                $table->dropColumn('new_column');
                $table->dropColumn('new_column_b');
            });
        }
    }
    
    0 讨论(0)
提交回复
热议问题