Javascript 如何将单个文件指定为仅种子
我正在使用knex进行播种,我有一个名为development的文件夹,其中有所有种子文件 我想要的是:如何为单个文件种子 我使用的命令是:knex seed:run--env=development 但是这个命令是为所有文件种子,我在db上得到重复的行 假设我昨天创建了种子文件,并对它们进行了种子设定,今天我想添加另一个种子文件,我只想对该文件进行种子设定,而不是对昨天的文件进行种子设定 来自Laravel的一个示例是:php artisan db:seed--class=ProductTableSeederJavascript 如何将单个文件指定为仅种子,javascript,seed,seeding,bookshelf.js,knex.js,Javascript,Seed,Seeding,Bookshelf.js,Knex.js,我正在使用knex进行播种,我有一个名为development的文件夹,其中有所有种子文件 我想要的是:如何为单个文件种子 我使用的命令是:knex seed:run--env=development 但是这个命令是为所有文件种子,我在db上得到重复的行 假设我昨天创建了种子文件,并对它们进行了种子设定,今天我想添加另一个种子文件,我只想对该文件进行种子设定,而不是对昨天的文件进行种子设定 来自Laravel的一个示例是:php artisan db:seed--class=ProductTab
谢谢只需将脚本移动到所需脚本以外的其他文件夹,运行种子并将脚本复制回来 只有两个命令,make和run。这是文件上的 runknex.seed.run([config]) 运行当前环境的所有种子文件
所以每次运行时都会执行所有脚本我个人只需将我的承诺封装在exports.up/down中的
if(boolean){…}
中,并将其切换为false,我不想运行。对于那些在2019年检查此问题的人+
要运行特定的种子文件,请执行:
$ knex seed:run --specific=seed-filename.js
不工作:knex seed:run--specific=seed-filename.js
const file\u name=path.basename(\u文件名)
const seedIsExist=wait knex('knex_seeds_lock')。其中({file_name})。first()
if(seedIsExist){
返回
}
来自Artem的解决方案效果良好:
您只需要创建表:knex\u seeds\u lock
我使用的代码如下:
`
const path = require('path')
exports.seed = async (knex) => {
try {
const file_name = path.basename(__filename)
const seedIsExist = await knex('knex_seeds_lock').where({ file_name }).first()
if (seedIsExist) {
return
} else {
await knex('users_types').del();
await knex('knex_seeds_lock').insert({ file_name })
await knex('users_types').insert([
{name: 'client'},
{name: 'driver'},
{name: 'admin'}
]);
return;
}
} catch (err) {
console.log("ERROR SEEDING")
console.log(err);
}
}`
如果我这样做,那么如果我想在另一台机器上执行种子文件,我就应该为每个特定的文件夹进行种子处理??您也可以编写一个批处理来重命名其他脚本,以便knex在种子执行时忽略它们,作为替代,但如果您将它们留在文件夹中,它们将被执行。此外,它们将按字母顺序运行,因此您必须注意脚本的名称。我使用数字作为前缀,如ex:01、02,因此我对排序没有问题,关于批处理,我不明白您的真正意思是什么?knex是否提供任何类似的选项:knex seed:run--file=nameOfFileOk我明白;)。如果您想知道您的选项是什么,您应该转到npm文件夹并查找npm\node\u modules\knex\lib\seed\index.js文件。第42行是播种机原型。这是一个与寻找目标文件种子的任务。嘿,那里。谢谢你的更新,但它仍然不起作用。这就像是
——specific
甚至不存在,我所有的种子都在运行:(知道为什么吗?我不确定没有看到更多的代码,但是knexfile.js中的种子目录路径是否设置为指向种子文件夹?