Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将单个文件指定为仅种子_Javascript_Seed_Seeding_Bookshelf.js_Knex.js - Fatal编程技术网

Javascript 如何将单个文件指定为仅种子

Javascript 如何将单个文件指定为仅种子,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

我正在使用knex进行播种,我有一个名为development的文件夹,其中有所有种子文件

我想要的是:如何为单个文件种子

我使用的命令是:knex seed:run--env=development 但是这个命令是为所有文件种子,我在db上得到重复的行

假设我昨天创建了种子文件,并对它们进行了种子设定,今天我想添加另一个种子文件,我只想对该文件进行种子设定,而不是对昨天的文件进行种子设定

来自Laravel的一个示例是:php artisan db:seed--class=ProductTableSeeder


谢谢

只需将脚本移动到所需脚本以外的其他文件夹,运行种子并将脚本复制回来

只有两个命令,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

  • 在DB knex_seed_lock表中创建
  • 将此添加到种子文件:
  • 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中的种子目录路径是否设置为指向种子文件夹?