在保留测试数据的同时,在laravel 5.2迁移中添加字段的过程是什么?

时间:2016-02-11 07:53:20

标签: php laravel laravel-5.2

我正在学习并尝试使用laravel 5.2,我很混淆如何在表格中添加字段。

我创建了一个名为2016_01_29_093417_create_thread_table.php的迁移文件,每当我想添加一个字段时,我在文件中添加一个代码,例如

$table->string('content');  

然后运行命令

php artisan migrate:refresh

新字段将出现在表格中,但测试数据(例如用户表中的用户将被截断)

问题是:

1)向表中添加新字段的正确方法(最佳实践)是什么? 2)如何将测试数据保存在所有表中,例如用户表中的用户?

任何人都知道怎么做?

2 个答案:

答案 0 :(得分:2)

有两种方法可以做到这一点。

您的应用已经存在,人们使用它并且您不想丢失数据:您只需进行新的迁移并提供up()down()相应的操作。例如:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class UsersNewField extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function ($table) {
            $table->string('email');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function ($table) {
            $table->dropColumn('email');
        });
    }
}

运行php artisan migrate后,它只会运行最新的迁移。

您的应用程序仍在开发中并且还没有人使用它:您使用种子来填充测试数据并根据需要编辑初始迁移。例如:

<?php

use Illuminate\Database\Seeder;

class UsersSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => 'First User',
            'email' => 'user1@example.com',
            'password' => bcrypt('somepass9019'),
        ]);

        DB::table('users')->insert([
            'name' => 'Second User',
            'email' => 'user2@example.com',
            'password' => bcrypt('somepass2039'),
        ]);

        DB::table('users')->insert([
            'name' => 'Third User',
            'email' => 'user3@example.com',
            'password' => bcrypt('somepass0534'),
        ]);
    }
}

运行php artisan migrate:refresh --seed后,它将重置数据库并使用初始/测试数据对其进行播种。

答案 1 :(得分:1)

您需要为每个列更改创建新的迁移

您需要使用migrate

migration:refresh将重置并重新播种数据库

如果您希望保留测试数据并节省再次输入数据的时间,我建议您使用播种机和模型工厂 https://laravel.com/docs/5.1/seeding#using-model-factories