首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Objection.js的多对多中插入带有额外字段的

在Objection.js的多对多关系中插入带有额外字段的记录,可以通过使用中间表来实现。中间表是连接两个多对多关系表的表,它包含了额外字段。

具体步骤如下:

  1. 创建中间表:首先,需要创建一个中间表,用于连接两个多对多关系表。中间表包含了额外字段,用于存储额外的信息。可以使用数据库管理工具或者Objection.js的迁移工具来创建中间表。
  2. 定义模型:在Objection.js中,需要定义与中间表对应的模型。模型定义了中间表的结构和字段。可以使用Objection.js提供的Model类来定义模型。
  3. 建立关联关系:在两个多对多关系表的模型中,使用Objection.js提供的relationMappings属性来建立关联关系。在关联关系中,需要指定中间表的模型和外键。
  4. 插入记录:要插入带有额外字段的记录,可以使用Objection.js提供的insertGraph方法。该方法可以同时插入多个关联的记录,并且可以指定额外字段的值。

下面是一个示例代码:

代码语言:javascript
复制
// 导入必要的模块
const { Model } = require('objection');

// 定义中间表模型
class MiddleModel extends Model {
  static get tableName() {
    return 'middle_table'; // 中间表的表名
  }
}

// 定义多对多关系表模型
class ModelA extends Model {
  static get tableName() {
    return 'model_a'; // 多对多关系表A的表名
  }

  static get relationMappings() {
    return {
      modelBs: {
        relation: Model.ManyToManyRelation,
        modelClass: ModelB,
        join: {
          from: 'model_a.id',
          through: {
            from: 'middle_table.model_a_id',
            to: 'middle_table.model_b_id',
            extra: ['extra_field'] // 额外字段
          },
          to: 'model_b.id'
        }
      }
    };
  }
}

class ModelB extends Model {
  static get tableName() {
    return 'model_b'; // 多对多关系表B的表名
  }

  static get relationMappings() {
    return {
      modelAs: {
        relation: Model.ManyToManyRelation,
        modelClass: ModelA,
        join: {
          from: 'model_b.id',
          through: {
            from: 'middle_table.model_b_id',
            to: 'middle_table.model_a_id',
            extra: ['extra_field'] // 额外字段
          },
          to: 'model_a.id'
        }
      }
    };
  }
}

// 插入记录
const modelA = await ModelA.query().insertGraph({
  name: 'Model A',
  modelBs: [
    {
      name: 'Model B 1',
      extra_field: 'Extra Field 1' // 额外字段的值
    },
    {
      name: 'Model B 2',
      extra_field: 'Extra Field 2' // 额外字段的值
    }
  ]
});

console.log(modelA);

在上面的示例中,MiddleModel是中间表的模型,ModelAModelB分别是两个多对多关系表的模型。在relationMappings中,通过extra属性指定了额外字段。在插入记录时,可以通过insertGraph方法同时插入多个关联的记录,并且指定额外字段的值。

这是一个简单的示例,实际应用中可能需要根据具体情况进行调整。关于Objection.js的更多信息和使用方法,可以参考Objection.js官方文档

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

DRFManytoMany字段更新和添加

orderId 是自动生成UUID订单区域是外键,下单人也是外键,菜品orderMenu是一个字段(其实通过我查到方法说都是外键字段就可以实现但是个人觉得菜品和订单应该是多会比较好理解...') # 获取传入过来信息格式为[{},{}] # 我方法比较笨,理论上是可以传入多个就是实例化时候添加many = True 来标识,但是实在是没心思搞了...orderMenu = request.data.get('orderMenu') for i in orderMenu: # 我思路是既然不能在更新主表时候更新字段那就单独把字段提出来更新...# 传入字段时候同步传入需要更新中间表id obj = OrderCenterThough(pk=i.get('id')) #...,时候又发现了代码几个bug1、可以更新不是订单人菜品2、更新时候只能更新已经生成菜品内容,因为无法为订单添加新菜品,这个涉及到中间表对应关系已经确定了。

91520

Django 字段更新和插入数据实例

普通字段字段 字段 插入数据 #插入数据 def add(request): G_title=request.POST.get('title')#-------值为:python...从字段删除值(删除多关系): ?...可以看出这个blog_book_authors是根据多关系自动生成关系表,但是如果我们想要搜集关于这个作者发布某一本书籍时间额外增加一个字段,或者说与现有的系统集成,这个关系表已经存在了,那对于这样情形...,Django允许指定一个用于管理多关系中间模型,然后就可以把这些额外字段添加到这个中间模型,具体方法就是ManyToMany字段中指定through参数指定作为中介中间模型,修改上述models.py...,add(),remove(),create()这些方法都会被禁用,所以创建这种类型关系时候唯一方法就是通过创建中间模型实例 以上这篇Django 字段更新和插入数据实例就是小编分享给大家全部内容了

4.3K30
  • 快速学习-JPA

    第4章 JPA 4.1 示例分析 我们采用示例为用户和角色。 用户:指的是咱们班每一个同学。 角色:指的是咱们班同学身份信息。...所以我们说,用户和角色之间关系是。 4.2 表关系建立 表关系建立靠是中间表,其中用户表和中间表关系是一,角色表和中间表关系也是一,如下图所示: ?...映射时候不用写。...(保存),如果双向都设置关系,意味着双方都维护中间表,都会往中间表插入数据,中间表2个字段又作为联合主键,所以报错,主键重复,解决保存失败问题:只需要在任意一方放弃中间表维护权即可,推荐在被动一方放弃...(0); 4.5.2 删除 @Autowired private UserDao userDao; /** * 删除操作 * 删除时,双向级联删除根本不能配置

    1.6K20

    EF Core映射如何实现?

    EF 6.X映射是直接使用HasMany-HasMany来做。...但是到了EF Core,不再直接支持这种方式了,可以是可以使用,但是不推荐,具体使用可以参考《你必须掌握EntityFramework 6.X与Core 2.0》一文。...modelBuilder.Entity() .HasKey(t => new { t.PostId, t.TagId }); } } 这样就完成了我们映射了...我们只是通过多建立了一个表,将两个实体类Id作为联合主键。 Identity框架,如果你细心点,你会发现有个userroles表,这个表是就是用来做Users表和Roles表映射。...那么接下来我们只要新建一个实体类,随后在上下文类映射到表: modelBuilder.Entity.ToTable("userroles"); 这样就可以了。

    33810

    Hibernate 一、 关联关系 配置

    true 表示不由自己执行,而有对应另外一方执行。false 则相反,表示由自己维护关系。 inverse 属性,如果由one来维护,那么性能会非常低。...在数据库设计时,需要设计一个中间表 teacher_student ,通过中间表描述学生表和老师表多关系。...其映射文件配置方式与一很类似,也需要一个 class 属性来设置关联属性类型,column 属性用来设定哪个字段去做外键关联,最后,根据业务需要,将某一方inverse 属性设置为false。...---- 1、这里比一多关联一个 table 属性,table 指向数据库建立关联那张表。 2、Key column : 关联表中和 student 表发生关系字段。...3、Many-to-many column 指的是关联表与 class (com.qbz.entity.Teacher) 关联字段

    3.1K20

    教你Tableau绘制蝌蚪图等带有空心圆图表(链接)

    本文将通过分享多种方法,包括成功与失败尝试,来讲解如何在Tableau创建蝌蚪图等带有空心圆图表。...例如,Mark蝌蚪图变体,它看起来像这样。 注意这些线穿过了圆圈并进入到了圆心。...那么为什么不创建一个有白色圆心圆圈PNG文件里呢?这样做问题是,当Tableau对保存为具有透明背景PNG文件自定义图形上颜色编码时,它会改变白色中心颜色,最后会出现彩色圆点。...再有就是自定义图形极低分辨率会使你无法PDF 或图像以高分辨率打印或导出它们。 那么如何更改数据?我们可以通过计算来缩短这些线。...带有空心圆圈哑铃图: 前一时段用空心圆而当前时段用实心圆表示哑铃图: 用白色圆圈点与线之间构造间隙哑铃图: 带有空心圆圈棒棒糖图: 带有空心圆圈折线图

    8.4K50

    自定义 Django 管理界面内联模型

    问题背景 Django 管理界面,用户可以使用内联模型来管理一关系。但是,当一多关系是多时,Django 提供默认内联模型可能并不适合。...例如,如果存在一个产品模型和一个发票模型,并且产品和发票之间是关系,那么发票管理界面,Django 会显示一个表格,其中包含所有产品及其对应复选框。...这种形式内联模型对于管理少量产品还可以接受,但是如果产品数量很多,那么这种内联模型就会非常不美观和难以使用。2. 解决方案为了解决这个问题,我们可以自定义内联模型显示方式。... formset_factory() 函数,指定 model 参数为内联模型模型类,并指定 fields 参数为内联模型需要显示字段。...下面是一个示例代码,演示了如何自定义内联模型显示方式:from django.contrib import adminfrom django.contrib.admin.utils import

    11510

    TextBind:开放世界轮交织模态指令跟随

    我们介绍了TextBind,这是一个几乎无需注释框架,用于赋予更大型语言模型轮交织模态指令跟随能力。 我们方法仅需要图像描述,并从语言模型生成模态指令-响应对话。...我们发布了我们数据集、模型和演示,以促进未来模态指令跟随领域研究。...数据 TextBind提供了处理和生成任意交织图像和文本内容示例,使语言模型能够开放世界场景与用户进行自然互动。...demo 语言模型能够执行各种任务,包括根据一组图像创作引人入胜故事,比较多个图像共同和不同之处,用生动图像解释概念,生成带有插图长篇连贯故事等等。...最有趣是,我们模型核心创新在于其能够广泛真实场景与用户自然互动。欢迎访问我们demo[1]。

    38020

    快速学习-JPA

    第3章 JPA 3.1 示例分析 我们采用示例为客户和联系人。 客户:指的是一家公司,我们记为A。 联系人:指的是A公司员工。 不考虑兼职情况下,公司和员工关系即为一。...3.2 表关系建立 多关系,我们习惯把一一方称之为主表,把一方称之为从表。在数据库建立一关系,需要使用数据库外键约束。 什么是外键?...@OneToMany: 作用:建立一关系映射 属性: targetEntityClass:指定多方字节码 mappedBy:指定从表实体类引用主表对象名称...2、如果配置了放弃维护关联关系权利,则不能删除(与外键字段是否允许为null, 没有关系)因为删除时,它根本不会去更新从表外键字段了。...(情况下) 3.5.3级联操作 级联操作:指操作一个对象同时操作它关联对象 使用方法:只需要在操作主体注解上配置cascade /** * cascade:配置级联操作 *

    1.9K20

    使用iptables租户环境TCP限速

    为了方便用户,开发时候不必自己开发环境跑一个 SideCar,我用 socat 一台开发环境机器上 map UDS 到一个端口。...我使用说明文档里用红色大字写了这是开发测试用,不能压测,还是有一些视力不好同事会强行压测。隔三差五我就得去解释一番,礼貌地请同事不要再这样做了。 最近实在累了。...方法是 Per-IP rate limiting with iptables[1] 学习到,这个公司是提供一个租户 SaaS 服务,也有类似的问题:有一些非正常用户 abuse 他们服务,由于...因为这个应用内部就可以控制了,但是我这里是想所有的 packet 进行限速,所以就不需要用到这个 module) 完整命令如下: $ iptables --new-chain SOCAT-RATE-LIMIT...Chain 加入到 INPUT ,对此端口流量进行限制。

    84120

    依赖注入模块工程应用

    相反,本文从依赖注入角度介绍了我们 Plaid 进行模块化实践主要成果。 我们设置 在前面的文章,我写过 Plaid 应用模块化整体过程。...在任何需要注入地方,我们都需要在合适时机调用底层函数,大多数情况下不是在对象初始化时就是 onCreate 方法。...我们 Plaid 应用中集成 Dagger 方式 当我们决定引入 Dagger 到 Plaid 应用时,我们已经学到了宝贵一课,尤其是模块化。 不要试图一次就覆盖太多内容。...这也允许我们整个代码库逐步推出更改,与此同时每个人任务也可持续进行。 Plaid 应用内我们使用已验证后 about 功能模块作为 Dagger 练习模块。...如果发现译文存在错误或其他需要改进地方,欢迎到 掘金翻译计划 译文进行修改并 PR,也可获得相应奖励积分。文章开头 本文永久链接 即为本文 GitHub 上 MarkDown 链接。

    1.8K10

    版本 Python 使用灵活切换

    今天我们来说说 windows 系统上如果有版本 python 并存时,如何优雅进行灵活切换。...虽然 Python3 已经出来很久了,虽然 Python2 即将成为历史了,但是因为历史原因,依然有很多公司老项目继续使用着 Python2 版本(切换成本太高),所以大多数开发者机器上 Python2...和 Python3 都是并存,本文主要说明这种情况下如何便捷 Python2 和 Python3 之间进行切换。...WindowsPowerShell\v1.0\;C:\Program Files\Git\cmd;C:\Python34;C:\Python27; 这时候我们直接在 cmd 输入 python,已经可以被识别了,但是识别的总是路径环境变量中排前面的那个版本...-m pip install requests python36 -m pip install requests 这样安装依赖库就是各个版本之间相互独立

    2.4K40

    还得再来聊聊Laravel模型一些事

    前言 之前,文章:https://www.misiyu.cn/article/58.html 已经发过关于Laravel多关系了。 但回过头来,过了个把月再去看,我自己都忘了怎么写了。...目前需求是信息表里面的多个信息可能同属于来源表一条记录。 同样,来源表多条信息可能属于信心表一条记录。 简言之就是,这是关系。 细节 新建迁移文件就不说了。...重点是第三张表,第三张表最少需要2个字段:即两张表外键 ? 注意: 1、你想要有其他字段也行,我们这里讨论最简单情况。 2、第三张表命名有要求,主要是Laravel默认情况关系。...当然,搞不懂默认关系,我们模型关联时候指定表明就行。...); $id = $ref->id; 2、假设我们信息表(netDisks)插入了一条记录,得到一个model: $model = NetDisk::create(['xx'=>$xx]); 那么我们可以使用以下语句建立关系

    1.6K00

    TiDB 7.1 租户中泰证券应用

    本文详细介绍了中泰证券系统国产化改造项目中采用 TiDB 租户技术实施过程。...文章分析了中泰证券数据库系统现状以及引入 TiDB 资源管控技术必要性,探讨了 TiDB 租户关键特性,并阐述了实际应用具体操作步骤。...通过该技术应用,中泰证券有效降低了运维成本,提升了开发效率。 文章强调了 TiDB 租户证券企业应用优势,特别突出了其资源观测、复用、可配置性等方面的价值。...此能力可以在线调整,业务几乎无感知。资源不足极端场景下,能够控制不同用户资源消耗,保证各业务系统资源隔离性,用户可以安心使用 TiDB 租户能力。...目前,证券企业,许多业务系统跑不同 MySQL 集群上面。

    18100

    提示 依赖注入模块工程应用

    相反,本文从依赖注入角度介绍了我们 Plaid 进行模块化实践主要成果。 我们设置 在前面的文章,我写过 Plaid 应用模块化整体过程。...在任何需要注入地方,我们都需要在合适时机调用底层函数,大多数情况下不是在对象初始化时就是 onCreate 方法。...我们 Plaid 应用中集成 Dagger 方式 当我们决定引入 Dagger 到 Plaid 应用时,我们已经学到了宝贵一课,尤其是模块化。 不要试图一次就覆盖太多内容。...这也允许我们整个代码库逐步推出更改,与此同时每个人任务也可持续进行。 Plaid 应用内我们使用已验证后 about 功能模块作为 Dagger 练习模块。...如果发现译文存在错误或其他需要改进地方,欢迎到 掘金翻译计划 译文进行修改并 PR,也可获得相应奖励积分。文章开头 本文永久链接 即为本文 GitHub 上 MarkDown 链接。

    1.7K10

    非局部静态数据编译单元窘境

    静态数据包括: namespace内定义名字空间域变量 √ 类中被声明为static类域变量 √ 函数中被声明为static局部静态变量 × 文件中被定义全局变量(不管有没有static...综上所言,本文标题含义是:如果在文件,分别定义了多个静态数据(不含局部变量),那么他们之间相互依赖关系将会出现微妙窘境。 什么窘境呢?...事情是这样,由于静态数据会在程序运行开始时刻进行初始化(不管是指定初始化,还是系统自动初始化),并且C++标准没有规定多个文件这些静态数据初始化次序,这就会带来一个问题:如果非局部静态数据相互依赖...因此,MF很有可能调用了一个未初始化对象startup函数,这很尴尬。 避免这种情况做法也很简单,那就是定义一个函数,专门用来处理这些引发麻烦编译单元里非局部静态数据。...BMW().startup(); // 使用car对象 } 没错,就是BMW后面加了一括号。

    78820
    领券