加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – Laravel数据迁移

发布时间:2020-12-14 19:43:53 所属栏目:大数据 来源:网络整理
导读:有没有办法在Laravel中进行数据迁移? 我已经找到关于如何种子数据库的一些说明,但不包括我需要将一个字段分割成多个字段或将多个字段合并为一个的情况. 一个可能的解决方案是查询数据库并更新循环中的每个记录.这种方法的问题是模型可能不会在迁移期间反映
有没有办法在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');
        });
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读