我在学拉威尔,有个问题我自己也不太明白。例如,我有db表,比如 cities 或者 car_models 他们的迁徙。但我不想每次手动填充这些表migrate:refresh or 在测试/生产服务器上部署项目,因此它们必须具有一些默认内容。在迁移过程中填充它们可以吗?或者这就是播种机的用途(据我所知,它们是用来在表中填充一些假数据以满足测试需要的)
cities
car_models
qqrboqgw1#
两个答案都是正确的。但他们遗漏了一些重要的东西。在我看来,使用seeder类最重要的价值在于将迁移与总体逻辑解耦。为什么这很重要?你有很多答案:代码质量。支持几个坚实的原则。良好做法。更好地理解你的代码。清洁剂api。但对我来说,最重要的一点是,这可以让你对不同的porpus使用相同的代码得到不同的结果。这是一个例子:在迁移文件中编写种子/填充逻辑。如果你想把你的应用部署到一个 production 环境?那么,您需要修改迁移以避免包含伪数据的功能,然后提交这些更改并将其上载到服务器。如果您需要在不同的环境中部署它( staging 例如)您需要再次更改。相反,如果创建特定的类来填充数据库(种子),则可以灵活地使用相同的代码,并使用命令标志将它们包含(或相反):
production
staging
// 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 以此类推)而不是运行所有的播种机( users , orders , reservations , ...).我希望这有帮助。
roles
types
users
orders
reservations
0s0u357o2#
迁移用于创建表,而seeder用于将虚拟数据插入数据库中的表。您可以在迁移中填充它们,但这不是一个好的做法,可能会导致混淆。
2条答案
按热度按时间qqrboqgw1#
两个答案都是正确的。但他们遗漏了一些重要的东西。
在我看来,使用seeder类最重要的价值在于将迁移与总体逻辑解耦。
为什么这很重要?你有很多答案:
代码质量。
支持几个坚实的原则。
良好做法。
更好地理解你的代码。
清洁剂api。
但对我来说,最重要的一点是,这可以让你对不同的porpus使用相同的代码得到不同的结果。这是一个例子:
在迁移文件中编写种子/填充逻辑。如果你想把你的应用部署到一个
production
环境?那么,您需要修改迁移以避免包含伪数据的功能,然后提交这些更改并将其上载到服务器。如果您需要在不同的环境中部署它(staging
例如)您需要再次更改。相反,如果创建特定的类来填充数据库(种子),则可以灵活地使用相同的代码,并使用命令标志将它们包含(或相反):
您可以更细粒度地指定特定的播种机:
当您希望在环境中只填充几个表(如
roles
,types
,cities
以此类推)而不是运行所有的播种机(users
,orders
,reservations
, ...).我希望这有帮助。
0s0u357o2#
迁移用于创建表,而seeder用于将虚拟数据插入数据库中的表。您可以在迁移中填充它们,但这不是一个好的做法,可能会导致混淆。