【发布时间】:2015-04-12 08:50:35
【问题描述】:
迁移完成后,我可以在我的迁移中添加一些东西来自动为表添加测试数据吗?
或者您有单独播种吗?
【问题讨论】:
标签: php laravel laravel-4 migration laravel-5
迁移完成后,我可以在我的迁移中添加一些东西来自动为表添加测试数据吗?
或者您有单独播种吗?
【问题讨论】:
标签: php laravel laravel-4 migration laravel-5
您可以使用--seed 选项调用migrate:refresh 以在迁移完成后自动播种:
php artisan migrate:refresh --seed
这将回滚并重新运行所有迁移,然后运行所有播种机。
除了一点点额外功能,您还可以随时使用 Artisan::call() 从应用程序内部运行工匠命令:
Artisan::call('db:seed');
或
Artisan::call('db:seed', array('--class' => 'YourSeederClass'));
如果你想要特定的播种机类。
【讨论】:
虽然lukasgeiter's answer 是正确的,但我想详细说明您的第二个问题。
还是要单独播种?
是的。由于您在谈论测试数据,您应该避免将种子与迁移结合起来。当然,如果这不是测试数据,而是应用程序数据,您可以随时将插入数据作为迁移的一部分。
顺便说一句,如果您想将数据作为 testing 的一部分播种,您可以在 Laravel 测试用例中调用 $this->seed()。
【讨论】:
lukasgeiter's answer 对测试数据是正确的,但是按照 artisan 命令运行
php artisan migrate:refresh --seed
在生产中将刷新您的数据库,删除从前端输入或更新的任何数据。
如果您想在迁移过程中为您的数据库播种(例如,对保留现有数据的应用程序进行更新),例如在种子数据中添加新表国家,您可以执行以下操作:
在 database/seeds 和你的位置表迁移中创建一个数据库播种器示例 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');
}
}
如果 YourTableSeeder 类出现 php class not found 错误,请运行 composer dump-autoload。
【讨论】: