我正在学习并尝试使用laravel 5.2,我很混淆如何在表格中添加字段。
我创建了一个名为2016_01_29_093417_create_thread_table.php的迁移文件,每当我想添加一个字段时,我在文件中添加一个代码,例如
$table->string('content');
然后运行命令
php artisan migrate:refresh
新字段将出现在表格中,但测试数据(例如用户表中的用户将被截断)
问题是:
1)向表中添加新字段的正确方法(最佳实践)是什么? 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