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



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

我想要的是:如何播种单个文件。

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

假设我昨天创建了种子文件,并将它们设定为种子,

今天我想添加另一个种子文件,我只想为该文件设定种子,而不是昨天的文件。

Laravel的一个例子是:php artisan db:seed --class=ProductTableSeeder

谢谢

>对于那些在2019+中检查此内容的人

根据膝盖文档

要运行特定的种子文件,请执行:

$ knex seed:run --specific=seed-filename.js

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

种子 API 只有两个命令,make 和 run。这是来自文档。

runknex.seed.run([config])

运行当前环境的所有种子文件。

因此,所有脚本都将在每次运行时执行

不起作用:knex seed:run --specific=seed-filename.js

  1. 在数据库knex_seed_lock表中创建
  2. 将此添加到种子文件:

const file_name = path.basename(__filename)
  const seedIsExist = await knex('knex_seeds_lock').where({ file_name }).first()
  if (seedIsExist) {
    return
  }

  1. 并将其添加到文件末尾:

await knex('knex_seeds_lock').insert({ file_name })

结果,在数据库中,您将获得之前已经运行的所有种子

就我个人而言,我只是将我的承诺包装在 export.up/if (boolean) {...} down 中,并将我不想运行的那些切换为 false。

Artem的解决方案工作正常:你只需要创建表:knex_seeds_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);
         }
    }`

@Madison_Lai的答案是正确的,但与对该答案的评论类似,我的--specific标志也被忽略了。

TLDR:添加--分隔符解决了我的问题。

npm run knex seed:run -- --specific=seed-filename.js

详:

就我而言,package.json中的knex脚本包含一个传递的参数,当我尝试通过 CLI 传递其他参数时,最终会导致排序问题。

package.json

"scripts": {
  "knex": "./path/to/knex --knexfile=./path/to/knexfile.js"
}

在 CLI 中,

npm run knex seed:run --specific=seed-filename.js

被解析如下,完全失去了--specific参数

./path/to/knex --knexfile=./path/to/knexfile.js "seed:run"

在传递附加参数之前前缀--(如此处建议)为我解决了问题

npm run knex seed:run -- --specific=seed-filename.js

相关内容

  • 没有找到相关文章

最新更新