【问题标题】:Adding duplicates to SailsJS model with many-to-many association使用多对多关联向 SailsJS 模型添加重复项
【发布时间】:2015-07-05 15:36:04
【问题描述】:

我有两个模型,项目和订单,它们具有多对多关联。在过去的 5 个小时里,我一直在尝试做的是找出一种将多个项目对象添加到包括重复项在内的订单的方法。

如果项目是独一无二的,它工作得很好,但如果我尝试这样的事情:

    order.items.add([12, 13, 12, 12]);
    order.save();

它只会保存 12、13。重复的将被忽略,如果您想订购多个任何项目,那就不好了。

任何建议都会有所帮助。

【问题讨论】:

    标签: javascript many-to-many sails.js sails-mongo


    【解决方案1】:

    数据库方案中的多对多关联是在从一个表到任何记录到另一个表的任何记录之间创建关系,当然它总是唯一的,因为12 已经与该order 记录有关联。

    解决方案是,使用额外的模型来实现。例如models文件夹中:

    Order.js

    module.exports = {
    
      attributes: {
        items : {collection: 'OrderItem', via: 'order'}
      }
    };
    

    OrderItem.js

    module.exports = {
    
      attributes: {
        order : {model: 'Order'},
        item  : {model: 'Item'}
      }
    };
    

    Item.js

    module.exports = {
    
      attributes: {
      }
    };
    

    因此,从Order 模型中,您可以添加一些OrderItem,这是一个表示OrderItem 之间关系的模型,并且OrderItemOrder 的观点中是唯一的,尽管下面的项目它的记录可能是一样的。

    【讨论】:

    • 好的,但我试图避免这样做,因为sails 会自动创建一个连接表。我知道如果我查看使用 MySQL 的登台,它确实有 Sails 创建的 OrderItems 表来处理这个问题。原来它附带的 Sails-disk 数据库有这个问题,但如果我使用我的 Mongo 或 MySQL 连接,它就像一个魅力。
    • 但问题是,它不能依赖基本/标准的多对多数据库关联,因为我提到12 已经与您提到的order 有关联。它需要一个something in between 作为OrderItem 之间的桥梁,从Order 的角度来看,它可以代表一个独特的价值。
    【解决方案2】:

    一种方法是创建一个新模型来维护多对多关联,但另一种方法是在您的订单模型中添加一个名为“数量”的列,并在您再次添加相同项目时增加它.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多