KnexJS 迁移及相关种子数据

2024-01-06

我在学习 BookshelfJS/KnexJS(从 SequelizeJS 切换)的过程中遇到了将数据导入到通过 KnexJS 中的迁移功能创建的多个表中的问题。有4张桌子:

  1. servers
  2. operating_systems
  3. applications
  4. applications_servers

具有以下约束:

  • servers.operating_system_id参考operating_systems.id
  • applications_servers.server_id参考servers.id
  • applications_servers.application_id参考applications.id

当我运行时,表格创建得很好knex migrate:latest --env development servers,当我将种子数据导入表时出现错误。

最初,我将 4 个表的种子数据组织到目录中的 4 个不同文件中./seeds/dev,这只是${table_name}.js:

  1. 操作系统 http://pastebin.com/F9CYUMtZ
  2. 服务器.js http://pastebin.com/1T8LLmNZ
  3. 应用程序.js http://pastebin.com/FcvRFLqW
  4. applications_servers.js http://pastebin.com/bB3mxJrV

经过一番调试后,我意识到当文件中的种子数据applications_servers.js,因为当我把那个拿出来时,其他三个运行得很好。然后当我删除 3 个种子文件并移动时applications_servers.js to the ./种子/开发/目录并执行knex seed:run, the 应用程序服务器表被填充得很好。但是,当我尝试一次导入所有 4 个文件的种子数据时,我收到以下错误:

# knex seed:run
Using environment: development
Error: ER_NO_REFERENCED_ROW_2: Cannot add or update a child row: a foreign key constraint fails (`bookshelf_knex_lessons`.`applications_servers`, CONSTRAINT `applications_servers_server_id_foreign` FOREIGN KEY (`server_id`) REFERENCES `servers` (`id`) ON DELETE CASCADE)
at Query.Sequence._packetToError (/Users/me/Documents/scripts/js/node/bookshelf_knex/node_modules/mysql/lib/protocol/sequences/Sequence.js:48:14)
at Query.ErrorPacket (/Users/me/Documents/scripts/js/node/bookshelf_knex/node_modules/mysql/lib/protocol/sequences/Query.js:83:18)

并且没有任何一行被插入到任何表中。

我想这可能与它们的进口顺序有关。 (因为它们必须按照上面列出的文件顺序导入)。因此,考虑到它们可能是按字母数字顺序引用的,我将它们重命名为:

  1. 1-operating_systems.js
  2. 2-servers.js
  3. 3-applications.js
  4. 4-applications_servers.js

但是,没有任何变化,没有行插入到任何表中,因此为了确定,我颠倒了文件上数字前缀的顺序,并且再次没有更改,没有插入任何行,并且返回了相同的错误。

注意:用于创建表以及所有种子数据的迁移脚本是从我创建的 JS 文件复制并粘贴的,该文件创建相同的表并使用 BookshelfJS/KnexJS 导入相同的数据,而不是使用迁移功能,它只是在通过节点执行时手动执行。你可以查看这个文件here http://pastebin.com/rHNj12Va

任何帮助,将不胜感激!

Edit:当我将 ./seeds/dev 中的所有种子文件合并为一个文件时,./seeds/dev/servers.js http://pastebin.com/nAq0nEs4,一切都导入得很好。这让我认为这可能是由于 knex 迁移异步执行造成的,因此 ID 被插入到数据透视表中,并且servers.operating_system_id可能尚未插入到关联的表中...如果是这种情况,有没有办法在种子文件中设置依赖关系?


Knex.js 的种子功能不提供任何执行顺序保证。每个种子都应该被编写为可以单独执行 - 即。您的单文件方法是正确的。

如果您想将各个种子文件分解为子模块,那么您可以尝试以下操作:

// initial-data.js
var operatingSystems = require('./initial-data/operating-systems.js');
var servers = require('./initial-data/servers.js');
exports.seed = function(knex, Promise) {
  return operatingSystems.seed(knex, Promise)
  .then(function () {
    return servers.seed(knex, Promise);
  }).then(function() {
    // next ordered migration...
  });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KnexJS 迁移及相关种子数据 的相关文章

  • 使用 JavaScript 使链接保持活动状态并在单击时显示悬停效果

    I am struggling to make this work I d like to make it where if O F is clicked the hover state stays active if another li
  • 使用 jQuery/JS 打开时使
    标签的内容具有动画效果

    我只想要 HTML5 的内容details标记为 滑行 动画打开 而不是仅仅弹出打开 立即出现 这可以用 jQuery Javascript 实现吗 Fiddle http jsfiddle net 9h4Hq HTML
  • Socket.io - “套接字 ID”是否被视为敏感信息?

    我正在使用 Node js 和 socket io 实现一个简单的聊天应用程序 想知道在整个对象中共享所有客户端的套接字 ID 是否被认为是一个好的做法 为了解释一下 我的每个用户都是这样表示的 nick John Doe dateJoin
  • 使用 Angular 下载具有动态 src 的脚本

    Angular 提供了通过动态名称动态加载模板的方法ng include 该部分中的内联 JS 和 CSS 可以正常加载 但没有一个好的方法来下载带有动态 url 的脚本 我们需要下载脚本 相对于调用它们的 html 部分的路径 即我们有一
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • 在 Node.js 中,什么是“on”?

    In 官方文档 http nodejs org docs v0 6 3 api http html http ClientResponse 有一些示例代码 var req http request options function res
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 快速将列的副本添加到 MySQL 表

    我需要一种快速的方法来复制表中的 DATETIME 列并为其指定一个新名称 我的表中有一个名为 myDate 的列 名为 myResults 我需要一个查询来在名为 newDate 的表中创建一个新列 该列的数据与 myDate 列完全相同
  • Jquery/Javascript 上传和下载文件,无需后端

    是否可以在没有后端服务器的情况下在 JavaScript 函数中下载和上传文件 我需要导出和导入由 JavaScript 函数生成的 XML 我想创建按钮 保存 xml 来保存文件 但我不知道是否可行 另一方面 我希望将 XML 文件直接上
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat
  • 是否有“npmpublish-f”的解决方法

    现在npm publish f已弃用 是否有解决方法或软件包可以覆盖发布后的目标版本 我知道关于semver http semver org 我还想要npm publish f 您可以取消发布特定版本 然后重新发布它 npm unpubli
  • node.js 本身还是 nginx 前端来提供静态文件?

    是否有更快的基准或比较 将 nginx 放在节点前面并让它直接提供静态文件或仅使用节点并使用它提供静态文件 nginx 解决方案似乎对我来说更易于管理 有什么想法吗 我不得不不同意这里的答案 虽然 Node 可以做得很好 但如果配置正确 n
  • HTML 离线应用程序缓存,列出下载的文件

    作为我正在构建的离线 Web 应用程序的加载屏幕的一部分 使用缓存清单 http developer apple com library safari documentation iPhone Conceptual SafariJSData
  • 为什么我不能在 AngularJS 中使用 data-* 作为指令的属性名称?

    On the t他的笨蛋 http plnkr co edit l3KoY3 p preview您可以注意到属性名称模式的奇怪行为data 在指令中 电话 Test of data named attribute br
  • Safari 支持 JavaScript window.onerror 吗?

    我有一个附加到 window onerror 的函数 window onerror function errorMsg url line window alert asdf 这在 firefox chrome 和 IE 中工作正常 但在 s
  • 如何获取浏览器视口中当前显示的内容

    如何获取当前正在显示长文档的哪一部分的指示 例如 如果我的 html 包含 1 000 行 1 2 3 9991000 并且用户位于显示第 500 行的中间附近 那么我想得到 500 n501 n502 或类似的内容 显然 大多数场景都会比
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中
  • post php mysql 的拆分关键字

    我有一个表存储帖子 ID 它的标签如下 Post id Tags 1 keyword1 keyword2 keyword3 我想循环遍历该表中的每一行并执行以下操作 将关键字1 关键字2 关键字3放入新表中 word id word val
  • 如何从图像输入中获取 xy 坐标?

    我有一个输入设置为图像类型

随机推荐

  • 使用 LINQ to MySQL (DbLinq) 和动态 LINQ 的可排序 JqGrid - Orderby 不起作用

    我在 JqGrid 中排序条目时遇到问题 Orderby 似乎不起作用 我在代码中设置了断点 我注意到 orderby 不会改变元素的顺序 知道可能出什么问题吗 我正在使用 LINQ to SQL 和 MySQL DbLinq 项目 我的操
  • 如何使用 BERT 进行机器翻译?

    我遇到了一个大问题 对于我的学士论文 我必须使用 BERT 制作一个机器翻译模型 但我现在一事无成 您知道可以在这里帮助我的文档或其他东西吗 我已经阅读了一些这方面的论文 但也许有文档或教程可以帮助我 对于我的学士论文 我必须将文本摘要翻译
  • 如何让 JavaScript 延迟,然后刷新页面

    我希望我的 JavaScript 在我创建的函数结束时等待七秒钟 然后刷新我的页面 如果它很重要 我在下面列出了 JavaScript 和 HTML 的重要部分 JavaScript var textfill function var no
  • 录音在java中不工作

    我正在尝试通过java录制声音 该声音正在我的Windows机器上通过扬声器 耳机播放 我遇到的问题是我没有找到 AudioSystem 支持的单个 TargetDataLine 我尝试了 getSupportedFormats 方法来检查
  • 编程范式、设计模式和应用程序架构之间的区别?

    我没有编程背景 经常遇到编程范式 设计模式和应用程序架构等术语 虽然我认为我对这些术语的含义有一个模糊的理解 但如果有人能够澄清每个术语是什么 它们与其他术语有何不同以及这些概念如何应用于 Objective C 我将不胜感激 编程范式 类
  • 如何显示输入类型=“datetime-local”的值?

    我的代码是这样的 div test div div div
  • 如何确定 QAction 的来源?

    我想知道是否有任何简单 优雅的方法来确定 QAction 的来源 我的意思是我有一个 QAction 它被添加到多个 QWidget 带有QWidget addAction http doc qt nokia com latest qwid
  • 以编程方式清除cloudflare缓存

    在将请求发送到 node js api 后 我尝试以编程方式清除单个 url 的 cloudflare 缓存 我正在使用https github com cloudflare node cloudflare https github com
  • 尝试计算手机解锁的次数

    几个月前我对此感到厌倦 但失败了 我想做的是计算用户解锁手机的次数并将其显示在屏幕上 但每次解锁手机时我都会得到模糊的数字 我的代码如下 我的主要活动 oncreate Override protected void onCreate Bu
  • 将文本插入传入电子邮件 Outlook 2013 锁定只读

    我正在努力通过 VBA 在传入电子邮件中插入字符串 该例程在发送邮件时工作正常 并且如果用户单击 操作编辑 它将对传入邮件起作用 问题是传入邮件被锁定为只读模式 在过去的 13 5 个小时里我到处寻找 在早期版本的 Outlook 中这是可
  • 如何在具有多个峰值的数据集中找到 FWHM?

    我正在使用一个 Python 脚本 它可以在特定的值范围内沿着一维轮廓查找峰值 或在我的例子中为谷值 的索引 我的目标是测量每个感兴趣的山谷的半高宽 这是一维轮廓的示例 https i stack imgur com UTj33 png 这
  • 当应用程序在后台时,android O 中的 onMessageReceived 不会被调用

    我正在从我的服务器发送数据有效负载通知 这是示例 url https fcm googleapis com fcm send to userToken data some json here 通过这种方式 即使应用程序没有运行 我也可以在所
  • 内省和反思有什么区别?

    任何人都可以从语言 环境不可知论的角度解释这两个概念之间的区别吗 编程语言是否需要满足一组条件才能进行反思和 或内省 如果有的话 这些条件是什么 维基百科文章 http en wikipedia org wiki Type introspe
  • 更新错误“模块”对象不可调用后,pip 不再工作

    pip 更新后 pip 已完全停止工作 Z gt pip install matplotlib Traceback most recent call last File c program files python37 lib runpy
  • 在 U-Boot 中使用 I2C 读取多个字节

    我的 Freescale p1022tw 板的 I2C 驱动程序有问题 U Boot 的控制台上有一个从 I2C 设备读取的命令 i2c md chip address 0 1 2 of objects 当我从 id 为 0x60 地址为
  • 为什么使用 Object.create() 和 console.log() 时不显示属性?

    当我使用文字语法创建对象时 将对象打印到控制台会显示该对象foo和p财产 foo foo p 42 console log foo console log foo p Outputs p 42 当我使用 Object create 语法时
  • SWI序言中#=和=:=有什么区别

    What is the difference between and in SWI prolog I have found the definition from SWI prolog but still confused about it
  • php 析构函数在流畅的界面下调用得太早

    我发现 php 析构函数有一个非常奇怪的事情 基本上我有一个数据库管理类 它使用工厂加载适配器来定义应该加载哪个适配器 mysql mysqli等 我只会写下代码中有趣的部分 因为类本身更长 但代码不涉及当前的麻烦 该问题仅发生在 mysq
  • 从 git 中删除但保留在工作目录中

    我添加了一堆要由 git 跟踪的文件 但它们被错误地添加 并提交 它们应该存在于工作目录中 它们是我的 IDE 使用的临时文件 但不被 git 跟踪 我现在已经创建了一个 gitignore 文件并添加了适当的条目 但是将文件从 git 跟
  • KnexJS 迁移及相关种子数据

    我在学习 BookshelfJS KnexJS 从 SequelizeJS 切换 的过程中遇到了将数据导入到通过 KnexJS 中的迁移功能创建的多个表中的问题 有4张桌子 servers operating systems applica