有没有办法在Laravel中进行数据迁移?
我已经找到关于如何种子数据库的一些说明,但不包括我需要将一个字段分割成多个字段或将多个字段合并为一个的情况.
我已经找到关于如何种子数据库的一些说明,但不包括我需要将一个字段分割成多个字段或将多个字段合并为一个的情况.
一个可能的解决方案是查询数据库并更新循环中的每个记录.这种方法的问题是模型可能不会在迁移期间反映表模式(Django provides a solution for this).
Laravel已经建成了:)
http://laravel.com/docs/migrations
只需运行
PHP artisan migrate:make migration_name_here
它将在app / database / migrations下创建一个迁移.然后,您可以在up()和down()方法中使用Laravel的数据库类.
以此为例…
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');
});
}
}