在apicloud中,类似班级对学生这种一对多的关系中,在查询班级信息时,也一并查询该班级的学生信息,此时需要在班级表中建立relation类型的列,关联到学生表,具体分析如下:
class,班级表,在“一对多”中是“一”,建立relation类型的列,列名为students,用于关联student表
student,学生表,在“一对多”中是“多”
注意:此处的表名必须按照驼峰命名规则,否则会报错或者添加不进去
但内部操作是这样的:在student表中,增加了隐藏列,列名的命名套路为:“一”的表名(uz*R*id),即:class(uz*R*id),该列的值为class表中的id值
那么以后在对student表添加记录时,还要对隐藏字段class(uz*R*id)设置值,否则class表的students列(relation类型)是关联不上该学生记录的。
废话少说,上代码:
1.现在有id是583692e43d0090e92a0a3751的班级,在该班级下添加一个学生,代码如下:
var Model = client.Factory("student");
Model.save({
"name":"小明",
"class(uz*R*id)":"583692e43d0090e92a0a3751"
},function(ret,err){
if(ret){
alert(JSON.stringify(ret));
}else{
alert(JSON.stringify(err));
}
});2.如果有ID是583697de731724496c08b8ca的学生,将该学生调到ID是583692e43d0090e92a0a3751的班级,代码如下:
var Model = client.Factory("student");
Model.save(
{
"_id":"583697de731724496c08b8ca"
},
{
"class(uz*R*id)":"583692e43d0090e92a0a3751"
}
,function(ret,err){
if(ret){
alert(JSON.stringify(ret));
}else{
alert(JSON.stringify(err));
}
});注意:一个Class不能有两个Relation列指向同一个Class
关联查询:
查询class表时,一并查询出student表的记录,代码如下:
var client = new Resource("A6921167039706", "05BA2B27-83BB-F3EE-55E0-70E6EFB62F21");
var Model = client.Factory("class");
Model.query({
filter:{
"fields":["id","name"],
"include":"students",//注意:此处students是class表中的字段名
"includefilter":{
"student":{//注意:此处的student是表名,关联class表的students字段
"where":{"name":"张三"},//过滤条件
"limit":2,//过滤数量
"fields":["id","name"]//查询的字段
}
},
"limit":2//限制记录数
}
}, function(ret,err){
if(err){
//处理错误 err
}else{
//处理数据 ret
// alert(JSON.stringify(ret));
document.getElementById("content").value=JSON.stringify(ret);
}
})注意:
1. "include":"students" 此处students是class表中的字段名
2. "includefilter":{ "student":{ 此处的student是表名,关联class表的students字段
感谢以下文章:
http://community.apicloud.com/bbs/forum.php?mod=viewthread&tid=16781
http://community.apicloud.com/bbs/forum.php?mod=viewthread&tid=8423&highlight=relation
http://community.apicloud.com/bbs/forum.php?mod=viewthread&tid=34621