model的关联关系处理

简介: model的关联关系处理

为了测试新建两个模型类。

ember g model post
ember g model comment

1,创建关系记录

//  app/models/post.js

import DS from 'ember-data';

export default DS.Model.extend({
  comments: DS.hasMany('comment')
});

//  app/model/comment.js

import DS from 'ember-data';

export default DS.Model.extend({
      post: DS.belongsTo('post')
});

设置关联,关系的维护放在多的一方comment上。

let post = this.store.peekRecord('post', 1);
let comment = this.store.createRecord('comment', {
  post: post
});
comment.save();

保存之后post会自动关联到comment上(保存postid属性值到post属性上)。

当然啦,你可以在从post上设置关联关系。比如下面的代码:

let post = this.store.peekRecord('post', 1);
let comment = this.store.createRecord('comment', {
    //  设置属性值
});
//  手动吧对象设置到post数组中。(post是多的一方,comments属性应该是保存关系的数组)
post.get('comments').pushObject(comment);
comment.save();

如果你学过Java里的hibernate框架我相信你很容易就能理解这段代码。你可以想象,post是一的一方,如果它要维护关系是不是要把与其关联的commentid保存到comments属性(数组)上,因为一个post可以关联多个comment,所以comments属性应该是一个数组。

2,更新已经存在的记录

更新关联关系与创建关联关系几乎是一样的。也是首先获取需要关联的模型在设置它们的关联关系。

let post = this.store.peekRecord('post', 100);
let comment = this.store.peekRecord('comment', 1);
comment.set('psot', post);  //  重新设置comment与post的关系
comment.save();  //  保存关联的关系

假设原来comment关联的postid1的数据,现在重新更新为comment关联id100post数据。

如果是从post方更新,那么你可以像下面的代码这样:

let post = this.store.peekRecord('post', 100);
let comment this.store.peekRecord('comment', 1);
post.get('comments').pushObject(comment);  // 设置关联
post.save();  //  保存关联

3,删除关联关系

既然有新增关系自然也会有删除关联关系。
如果要移除两个模型的关联关系,只需要把关联的属性值设置为null就可以了。

let comment = this.store.peekRecord('comment', 1);
comment.set('post', null);  //解除关联关系
comment.save();

当然你也可以从一的一方移除关联关系。

let post = this.store.peekRecord('post', 1);
let comment = this.store.peekRecord('comment', 1);
post.get('comments').removeObject(comment);  // 从关联数组中移除comment
post.save();

从一的一方维护关系其实就是在维护关联的数组元素。

只要Store改变了Handlebars模板就会自动更新页面显示的数据,并且在适当的时期Ember Data会自动更新到服务器上。

有关于模型之间关系的维护就介绍到这里,它们之间关系的维护只有两种方式,一种是用一的一方维护,另一种是用多的一方维护,相比来说,从一的一方维护更简单。但是如果你需要一次性更新多个纪录的关联时使用第二种方式更加合适(都是针对数组操作)。

相关文章
|
4月前
|
存储 SQL 测试技术
建立model
建立model
32 1
|
6月前
|
项目管理
项目管理问题之Entity和BaseEntity在DDD的model层中起什么作用
项目管理问题之Entity和BaseEntity在DDD的model层中起什么作用
|
8月前
|
前端开发 JavaScript 关系型数据库
typeorm连表查没有关联关系的实体
typeorm连表查没有关联关系的实体
130 1
|
机器学习/深度学习 算法 开发工具
ModelScope中,请问下四元关系的数据 能FineTune吗 关系会不会太复杂了
ModelScope中,请问下四元关系的数据 能FineTune吗 关系会不会太复杂了
52 1
|
存储 SQL 关系型数据库
关系模式(Relational Model)
关系模式(Relational Model)是一种在数据库中组织和表示数据的方式。它基于关系理论,使用表格(也称为关系)来存储和表示数据。在关系模型中,数据被组织为行(记录)和列(字段)的二维表格。
1447 0
|
机器学习/深度学习 算法 数据挖掘
Lesson 8.2 CART 分类树的建模流程与 sklearn 评估器参数详解
Lesson 8.2 CART 分类树的建模流程与 sklearn 评估器参数详解
|
数据库
一对多关系domain Model中设置使用AutoMapper时出错
一对多关系domain Model中设置使用AutoMapper时出错
180 0
一对多关系domain Model中设置使用AutoMapper时出错
|
前端开发 数据库
统一数据模型(Universal Data Model)系列一
# 引言 > > 当我们开始一个新的业务应用设计开发呢,无论是前台应用还是中后台应用,在前后端分离的团队组织划分及协作时,前台应用专注于交互体验的提升,涉及到多端(PC,H5,iOS,Android,小程序 - 支付宝,淘宝,微信...),大量的创新在于如何同一个页面开发复用提效统一输出到各端,定义DSL,结合可视化搭建,no code/low code进行页面开发;同时应对各端所需求数据的
4293 1
去model化和数据对象
原文 简述 去model化这个说法其实有点儿难听,model化就是使用数据对象,去model化就是不使用数据对象。所以这篇文章主要讨论的问题就是:数据传递时,是否要采用数据对象?这里的数据传递并不是说类似RPC的场景,而是在单个工程内部,各对象之间、各组件之间、各层之间的数据传递。
876 0