apicloud中relation的分析和操作


在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



原文出处:/show_1C71FstBXPX5.html