Ember Data不允许在hasMany关系中存在重复条目
Ember Data does not allow duplicate entries in hasMany relationships
我有以下模型:
#order/model.coffee
Order = DS.Model.extend {
line_items: DS.hasMany 'product', {async: true}
}
在某个时候,我想把一些产品添加到订单中。我发现我只能添加一次产品,再次添加相同的产品不起作用:
#product/route.coffee
...
actions:
# Not actually my code but illustrates the problem
addToCart: (product1, product2)->
order = @modelFor 'order'
console.log order.get('line_items.length') # prints 0
order.get('line_items').pushObject product1
console.log order.get('line_items.length') # prints 1
order.get('line_items').pushObject product2
console.log order.get('line_items.length') # prints 2
order.get('line_items').pushObject product1
console.log order.get('line_items.length') # prints 2
order.get('line_items').pushObject product2
console.log order.get('line_items.length') # prints 2
...
问题是用户可能不止一次想要一个项目。最简单的表示方法是使用具有重复项的数组。看来Ember不会让我为了感情而这么做。如何在关系中多次添加模型?
听起来您实际上需要一个带有数量字段的line_items
模型。仅仅在orders
模型中插入更多相同的项目并不是一个真正的标准化解决方案。
我建议如下:
lineItem = DS.Model.extend({
orders: DS.belongsTo('orders'),
product: DS.belongsTo('products'),
quantity: DS.attr('number'),
});
orders = DS.Model.extend({
lineItems: DS.hasMany('lineItem', {async: true}),
customerId: DS.belongsTo('customers'),
});
products = DS.Model.extend({
title: DS.attr('string'),
description: DS.attr('string'),
cost: DS.attr('string'),
});
这将允许您在lineItem模型中创建多个记录,这些记录将具有唯一ID,但绑定到特定订单,(这将解决多个订单具有相同lineItem的问题)例如,您可以具有:
{
"lineItem" :
[
{
"id": 1,
"orderId": 1,
"product": 1,
"quantity": 100,
},
{
"id": 2,
"orderId": 1,
"product": 2,
"quantity": 10,
},
{
"id": 3,
"orderId": 2,
"product": 1,
"quantity": 100,
}
]
}
在这个设计中,您将从json中删除对lineItems的引用,因为ember数据会为您处理反向关系(如果您不侧加载关系,则需要将async添加到模型中)。这意味着,如果您需要更改行项目,它将只影响一个订单,而如果您需要改变与行项目相关的订单,您只需在行项目模型上执行此操作。
{
"Orders" :
[
{
"id": 1,
"customerId": 123456,
},
{
"id": 2,
"customerId": 123456,
}
]
}
它们应该具有id
属性,然后它们将能够共存于同一阵列中,并且是相同产品类型的不同项-具有相同的名称(除id
之外的所有相同属性)。
或者,您有一个代表产品类型的记录,然后有一个quantity
属性来指定每个产品的数量。。
相关文章:
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 用于检查数组中是否存在元素的javascript自定义方法
- 气质的“nestRemoting()”有时可以'找不到关系
- 如何在Parse中创建一对多关系
- 未捕获的类型错误:无法读取属性'name'即使它存在,也无法定义
- 正在将事件处理程序添加到不存在的类
- 是否存在React Native“;WEB代码安全防护”;
- Ext.js从json构建模型关系的问题
- 一个密码测试程序,如果存在空格,它会提醒用户
- 验证会话中是否存在对象's数组
- javascript如果图像不存在don't加载它
- 嵌入多对多关系-如果一个新对象还不存在,则添加一个新的对象
- Jest 无法构建依赖关系图,源文件和构建文件之间存在冲突
- 当服务中存在嵌套的承诺关系时,AngularJS的行为很奇怪
- 无法在NodeJS中使用pg-promise -“关系不存在”查询PostgreSQL数据库
- Ember Data不允许在hasMany关系中存在重复条目
- 图像尺寸和文件大小之间是否存在关系