class MyTableSeeder extends Seeder
{
if (in_array(config('env'), ['production', 'staging'])) {
// Seed data for production or staging
} elseif (config('env') == 'dev') {
// Seed data only for dev environment
}
// Seed data for ALL environments (Production, staging, dev) etc. You get the picture
}
我见过一些人创建自己的配置项和助手函数来确定是否应该迁移数据,而不是简单地依赖 env 配置项,因此您将在播种器中看到类似的内容,而不是 if 语句检查 env 配置项:
class YourMigration extends Migration
{
protected $regions = ['East Bay', 'South Bay'];
public function up()
{
// Seed your region data here
foreach ($this->regions as $name) {
Region::create(['name' => $name]);
}
}
}
1条答案
按热度按时间shstlldc1#
通常情况下,您不会将数据从一个环境传输到另一个环境。但是,如果您需要用数据填充数据库,有几种方法可以使用,您似乎已经有了一些使用经验。
播种机
请注意,播种机的工作方式与迁移不同,每次发布作业时,播种机都会运行
php artisan db:seed
命令,这可能不是部署过程的一部分,因为它通常会导致重复数据。它的主要用途是在开发过程中重新填充数据库。既然是这样,我建议改用迁移。我见过许多应用程序使用带条件语句的seeders来决定是否基于当前环境对数据进行播种:
我见过一些人创建自己的配置项和助手函数来确定是否应该迁移数据,而不是简单地依赖
env
配置项,因此您将在播种器中看到类似的内容,而不是if
语句检查env
配置项:这增加了一点灵活性,可以标记是否为某些数据播种,而不考虑
env
应用程序当前设置为。迁移(推荐)
如果您需要在部署过程中使用数据填充数据库,例如您可能正在部署一个需要使用区域数据填充数据表才能工作的功能,我建议您在迁移过程中使用该功能:
在播种机上使用迁移的最大优点是,迁移只打算运行一次。一旦迁移,laravel就可以跟踪已经运行的迁移,并且不必费心重复它们,这样您就不必担心数据会多次出现在那里。另一方面,播种机在你每次跑步时都会跑
php artisan db:seed
它通常是在部署过程中不会设置为运行的。最终,我不认为有一个错误的方法去做,也没有一个被接受的,标准的方法去做,所以它真的取决于你