请教模型关联查询问题
1. 运行环境
1). 当前使用的 Laravel 版本?
8
2). 当前使用的 php/php-fpm 版本?
PHP 版本:7.3
3). 当前系统
CentOS 8
4). 业务环境
开发环境
2. 问题描述?
在做一个家谱
人物表:
person:id,name,gender
关系表:
relation:id,person_id,parent_id
3. 您期望得到的结果?
比如:选择父亲时,从人物表里面性别为男的里面选择一个,祖父,曾祖父也类似,然后在关系表里面保存person_id为当前人ID,parent_id为父亲或者母亲ID.
现在需要获取父亲家族或者母亲家族上三代和下三代人的列表
判断父亲或者母亲,根据人物表里面的性别来判断的。
不需要考虑兄弟姐妹问题,只需要获取前辈和孩子,孙子的数据
希望大神们指教
一起探讨,
我能想到的:
用mysql的话,
在表relation建立联合索引:(person_id,parent_id)和(parent_id,person_id) ,
这样循环去查找也是挺快的 ,查询前后三代人,倒也还好。
好像mysql版本5.6及以上版本就开始支持覆盖索引,索引查询速度很快的,
用覆盖索引就少了回表这一步,速度就快了。
这是我的想法。
1、模型中应该有
parent
父级模型关联方法,children
子级模型关联方法。2、其次还要写一个方法,其中有两个参数,分别为获取的是上级还是下级、一共获取几级。方法中使用 load 加载上下级关系。
双轨吗 哈哈哈哈
不建议用模型关联处理这种逻辑,本质上这就是 Tree 结构,放在业务层处理就行,数据库只返回一维的数据。