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

时间:2015-04-28 12:04:25

标签: javascript seed seeding bookshelf.js knex.js

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

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

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

假设我昨天创建了种子文件,并且我播种它们,今天我想添加另一个种子文件,我只想为这个文件播种,而不是昨天的文件。

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

由于

5 个答案:

答案 0 :(得分:4)

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

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

  

runknex.seed.run([配置])

     

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

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

答案 1 :(得分:1)

对于那些在2019年以后进行检查的人

根据knex文档

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

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

答案 2 :(得分:1)

不工作: 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 })

因此,在数据库中,您将获得早先已经运行的所有种子

答案 3 :(得分:0)

就个人而言,我只是将我的承诺包装在cell.setupWithAnswer(answer: self.answers[indexPath.row]) 中的exports.up / down中,然后将这些承诺切换为我不想运行的假。

答案 4 :(得分:0)

Artem的解决方案效果很好: 您只需要创建表:knex_seeds_lock

我使用的代码在这里:

import {BrowserRouter  as Router, Route, Link, Switch} from 'react-router-dom'