Перенос данных Laravel

Есть ли способ сделать миграцию данных в Laravel? Я нашел несколько инструкций о том, как засеять базу данных, но не охватывает случаи, когда мне нужно разделить одно поле на несколько полей или объединить несколько полей в один.

Одним из возможных решений является запрос базы данных и обновление каждой записи в цикле. Проблема с этим подходом заключается в том, что модели могут не отражать схему таблицы во время миграции ( Django предоставляет решение для этого ).

Related of "Перенос данных Laravel"

У Laravel есть миграции, построенные в 🙂 http://laravel.com/docs/migrations

Просто запустите

php artisan migrate:make migration_name_here 

и он создаст миграцию в приложении / базе данных / миграции. Затем вы можете использовать классы базы данных Laravel в своих методах up () и down ().

Давайте использовать это в качестве примера …

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

Как только это будет твердо и, вероятно, лучший ответ, я просто создам набор запросов в вашем любимом инструменте базы данных, например:

введите описание изображения здесь

Это простое решение, если вы не работаете в команде. Миграция определенно намного лучше, но иногда набор запросов будет быстрее.