迁移完成后,我可以在迁移中自动为表添加测试数据吗?
或者 分别播种?
答案 0 :(得分:39)
您可以使用migrate:refresh
选项致电--seed
,以便在迁移完成后自动播种:
php artisan migrate:refresh --seed
这将回滚并重新运行所有迁移并在之后运行所有播种机。
另外,您还可以使用Artisan::call()
从应用程序内部运行工匠命令:
Artisan::call('db:seed');
或
Artisan::call('db:seed', array('--class' => 'YourSeederClass'));
如果你想要特定的播种机课程。
答案 1 :(得分:5)
虽然lukasgeiter's answer是正确的,但我想详细说明你的第二个问题。
或者你必须单独播种吗?
是。由于您正在讨论测试数据,因此应避免将种子与迁移耦合。当然,如果这不是测试数据,而是应用程序数据,您总是可以将数据插入迁移的一部分。
顺便说一句,如果您希望将数据作为testing的一部分进行播种,则可以在Laravel测试用例中调用$this->seed()
。
答案 2 :(得分:3)
lukasgeiter's answer对于测试数据是正确的,但是按照工匠命令运行
php artisan migrate:refresh --seed
正式版将刷新您的数据库,删除从前端输入或更新的所有数据。
如果您希望通过迁移为数据库设置种子(例如,对应用程序进行更新以保留现有数据),例如将新的表国家/地区与种子数据一起添加,则可以执行以下操作:
创建数据库播种器示例YourSeeder.php和位置表迁移
class YourTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tablename', function (Blueprint $table) {
$table->increments('id');
$table->string('name',1000);
$table->timestamps();
$table->softDeletes();
});
$seeder = new YourTableSeeder();
$seeder->run();
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('tablename');
}
}