Laravel中数据库表的默认内容

时间:2018-08-21 13:45:00

标签: mysql database laravel migration

我正在学习Laravel,但有一个问题我无法弄清楚自己。 因此,例如,我有诸如citiescar_models之类的数据库表,并对其进行了迁移。但是我不想每次迁移时手动填充这些表:刷新或在测试/生产服务器上部署项目,因此它们必须具有一些默认内容。

是否可以在迁移过程中正确填充它们?还是这是播种机的用途? (据我了解,它们是用一些虚假数据填充表以满足测试需求)

2 个答案:

答案 0 :(得分:2)

两个答案都是正确的。但是他们缺少重要的东西。

我认为,使用Seeder类的最重要的价值在于您可以将迁移与总体逻辑脱钩。

为什么这很重要?您对此有很多答案:

  • 代码质量。
  • 支持多种SOLID原则。
  • 良好做法。
  • 更好地了解您的代码。
  • 更清洁的API。

但是对我来说,最重要的是,这使您可以使用相同的代码不同的豚鼠结果不同。这是一个示例:

您在迁移文件中编写了播种机/种群逻辑。如果您想在production环境中部署应用程序会怎样?好了,您将需要修改迁移,以避免包含虚拟数据的功能,然后提交这些更改并将其上载到服务器。如果需要将其部署在其他环境中(例如staging),则需要再次进行更改。

相反,如果您创建特定的类来填充数据库(Seeders),则可以灵活地使用相同的代码,并使用命令标志包括(或相反)它们:

// The following won't include your seeders
php artisan migrate

// This will include your seeder classes
php artisan migrate --seed

您甚至可以指定一个特定的种子播种器来更细化:

php artisan migrate
php artisan db:seed --class=UsersTableSeeder

当您只想填充环境中的几个表(例如rolestypescities等)而不是运行所有播种器({ {1}},usersorders,...)。

我希望这会有所帮助。

答案 1 :(得分:0)

迁移用于创建表,而seeder用于将虚拟数据插入数据库中的表。您可以在迁移中填充它们,但这不是一个好习惯,并且可能导致混乱。