thinkjs 学习之关联模型

为了弄cms,整这个rbac也很久了,中间断断续续地看看mysql的视频,大致把mysql的基本操作及概念弄清楚了。关于关联模型,就是表与表之间的关系:一对一,一对多,多对多。其中,一对一分为has_one 和 belong_to 。一对一也分为has_many和belong_to 。至于多对多只有many_to_many。thinkjs只有四种:has_one has_many 、belong_to、many_to_many.先抛开thinkjs,要实现上面所说的关系,从mysql的表设计上来说,

一对一表设计

两张表共有一个对应字段,比如学生信息,分为常用和不常用两张表,而这个学生的学号是唯一对应的,所以可以把这个当成是把两张表统一起来的字段,称为外键。我理解的外键就是约束表与表之间的关系。

一对多表设计

比如学生表和班级表之前的关系,一个学生只有一个班级,一个班级有多个学生,可以采用学生表中增加一个class_id来表示班级序号,来指定关系。

 多对多表设计

比如学生表和社团表,这时需要新建一张中间表只有两个字段student_id和club_id,分成两个多对多。

上面说的都有一个共同的例子,就是一定有一个特殊的字段来体现两张表的关系,称之为外键。

所以就数据库开发而言,我们已经有能力建立这种关系了。但是一般不推荐用外键,这样会降低数据添加的可控性,。回到thinkjs,为什么thinkjs的还有关联模型这一回事呢?我们知道模型其实就是orm,用来提供操作数据库的接口。所以使用官方文档创建关联模型,名字和表名一样,但是这样不就重了吗,那我再使用think.mode()获取模型的时候用的是哪个模型,其实都一样,相当于继承,可以在控制器中用两方提供的函数获取数据。这其实也就是模型的本质。下面就按照官方文档上的说明,把将`this.relation赋值相应的对象,在多对多的模式下,如果只是简单地查询,只需要有type属性指明type类型就好。它就会自动连接的,建议一定要自己试试。

this.relation = {
   role: {
     type: think.model.MANY_TO_MANY,
     rModel: "role_user",
     field: "id,name"
   }
 }

这样对user表正常地查询查看即可,可以说这种关系以后经常用。

你可能感兴趣的:(thinkjs)