发新话题
打印

ThinkPHP表间关联默认规则补充

ThinkPHP表间关联默认规则补充

外键的默认规则是当前Vo对象名称+id,例如:
UserVo对应的可能是表think_user (注意:think只是一个表前缀,可以随意配置)
那么think_user表的外键默认为 user_id,如果不是,就必须在定义表间映射关系的时候定义 foreign_key 。
同样的道理,对于多对多的情况,relation_foreign_key 的规则相同。
多对多的中间表默认表规则如下:
如果think_user 和 think_group 存在一个对应的中间表,默认的表名应该是
如果是由group来操作关联表,中间表应该是 think_group_user,如果是从user表来操作,那么应该是think_user_group,也就是说,多对多关联的设置,必须有一个Vo类里面需要显式定义中间表,否则双向操作会出错。
中间表无需另外的id主键(但是这并不影响中间表的操作),通常只是由 user_id 和 group_id 构成。

另外一个潜规则,因为表间映射关系可以定义condition属性,通常都是通过外键来获取关联数据,但是如果你定义了condition属性,那么就会重新使用condition的条件来获取关联表的数据。
在HAS_MANY 和MANY_TO_MANY情况下,可以使用mapping_order 和 mapping_limit 进行记录的排序和获取部分数据。HAS_ONE 和 BELONGS_TO 永远都只会返回最多一条记录。
另外除了MANY_TO_MANY之外,其他映射关系可以使用 mapping_fields 来返回你需要的关联表字段

如果你发现使用过程中有哪些不舒服或者更有效的方法,欢迎建议!
汇集PHP中文开发资源 - 打造中文PHP第一社群 - PHP开发资源网

TOP

发新话题