请教模型关联查询问题

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.

现在需要获取父亲家族或者母亲家族上三代和下三代人的列表

判断父亲或者母亲,根据人物表里面的性别来判断的。
不需要考虑兄弟姐妹问题,只需要获取前辈和孩子,孙子的数据
希望大神们指教

请教模型关联查询问题

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

一起探讨,
我能想到的:
用mysql的话,
在表relation建立联合索引:(person_id,parent_id)和(parent_id,person_id) ,
这样循环去查找也是挺快的 ,查询前后三代人,倒也还好。
好像mysql版本5.6及以上版本就开始支持覆盖索引,索引查询速度很快的,
用覆盖索引就少了回表这一步,速度就快了。
这是我的想法。

1年前 评论

1、模型中应该有 parent 父级模型关联方法,children 子级模型关联方法。

2、其次还要写一个方法,其中有两个参数,分别为获取的是上级还是下级、一共获取几级。方法中使用 load 加载上下级关系。

// 如果获取三级
return $this->load('children.children.children);
return $this->load('parent.parent.parent);
1年前 评论
阿布 (楼主) 1年前
playmaker

双轨吗 哈哈哈哈

1年前 评论

不建议用模型关联处理这种逻辑,本质上这就是 Tree 结构,放在业务层处理就行,数据库只返回一维的数据。

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!