我正在学习Laravel,但有一个问题我无法弄清楚自己。
因此,例如,我有诸如cities
或car_models
之类的数据库表,并对其进行了迁移。但是我不想每次迁移时手动填充这些表:刷新或在测试/生产服务器上部署项目,因此它们必须具有一些默认内容。
是否可以在迁移过程中正确填充它们?还是这是播种机的用途? (据我了解,它们是用一些虚假数据填充表以满足测试需求)
答案 0 :(得分:2)
两个答案都是正确的。但是他们缺少重要的东西。
我认为,使用Seeder类的最重要的价值在于您可以将迁移与总体逻辑脱钩。
为什么这很重要?您对此有很多答案:
但是对我来说,最重要的是,这使您可以使用相同的代码不同的豚鼠结果不同。这是一个示例:
您在迁移文件中编写了播种机/种群逻辑。如果您想在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
当您只想填充环境中的几个表(例如roles
,types
,cities
等)而不是运行所有播种器({ {1}},users
,orders
,...)。
我希望这会有所帮助。
答案 1 :(得分:0)
迁移用于创建表,而seeder用于将虚拟数据插入数据库中的表。您可以在迁移中填充它们,但这不是一个好习惯,并且可能导致混乱。