thinkphp关联模型笔记

大兄弟 2018年08月23日0   250

关联模型的作用实在是太大了,可能小项目用不上这种复杂模型,但是到了业务逻辑稍微复杂的项目中,模型的关联是很重要的,可以为开发者省下很多不必要的代码。

近日对thinkphp的核心进行了比较深入的研究,研究方法是结合手册和他的核心代码进行快速理解与实验。

这种扩展核心模型,主要是用数据库驱动中的增删改查前后的回调函数实现的,所以说tp作者是一个很有预见性的人。

通过手册,可以大概了解到,文字是没有太大作用的,因为实在看不懂。。。

关联模型的操作类型主要分三方面:一对一、一对多、多对多。

下面主要针对关联查询的相关知识和使用方法进行讲解。

首先是HAS_ONE:

  1. 主要起到作用的是mapping_type、foreign_key、mapping_key、parent_key
    而在手册中parent_key是没在HAS_ONE中涵盖的,但是它是却覆盖整个关联查询的属性,所以手册真的只是参考而已。

  2. parent_key是比较特殊的一个属性,手册中说的很专业,他们把它称为“自引用关联的关联字段 ”,我第一次看到这句话的时候是一点都没有理解。。。后来通过代码了解到,其实就是关联本表的时候本条数据归属的数据字段而已。就比如无限级分类,这个parent_key就是pid的意思。需要注意,如果关联的是本模型(本表)foreign_key的设置不会生效

  3. foreign_key是parent_key的相对属性,手册中称作“关联的外键名称”,当关联的不是本模型的时候会使用foreign_key进行关联查询,默认是"模型名_id"。

  4. mapping_key在手册中好像很少提及甚至没有提,但这是关联模型中比较关键的配置项,这个是配置本模型的关联字段名的,就是说,你现在创建的模型中和外部模型有相关联的字段名。默认是表主键

    得到相对应的表关系之后,将进行一对一查询。多的我也说不明白,直接上图意会吧。

    image.png

关联查询的原理基本上和HAS_ONE一样的,不同的是使用了枚举进行数据收集而已。通过这种关联模型的原理,你可以不使用系统封装好的RelationModel,甚至可以借用他的原理进行设计符合自己项目的对应模型。