php查询父表和子表,php – 从Laravel上的数据库中检索所有父/子记录(分层数据)...

由于您正在进行分层操作,因此应使用策略从数据库中保存和检索此数据.

一种方法是使用Nested Set Model,这可以使它更容易.

Laravel有一个很好的解决方案,称为etrepat/baum,它也解释了它是如何工作的,我引用:

背后的理论,一个TL; DR版本

可视化嵌套集如何工作的简单方法是考虑围绕所有嵌套集的父实体

它的孩子,它的父母围绕着它等等.所以这棵树:

root

|_ Child 1

|_ Child 1.1

|_ Child 1.2

|_ Child 2

|_ Child 2.1

|_ Child 2.2

可以像这样可视化:

___________________________________________________________________

| Root |

| ____________________________ ____________________________ |

| | Child 1 | | Child 2 | |

| | __________ _________ | | __________ _________ | |

| | | C 1.1 | | C 1.2 | | | | C 2.1 | | C 2.2 | | |

1 2 3_________4 5________6 7 8 9_________10 11_______12 13 14

| |___________________________| |___________________________| |

|___________________________________________________________________|

数字代表左右边界.然后表可能

看起来像这样:

id | parent_id | lft | rgt | depth | data

1 | | 1 | 14 | 0 | root

2 | 1 | 2 | 7 | 1 | Child 1

3 | 2 | 3 | 4 | 2 | Child 1.1

4 | 2 | 5 | 6 | 2 | Child 1.2

5 | 1 | 8 | 13 | 1 | Child 2

6 | 5 | 9 | 10 | 2 | Child 2.1

7 | 5 | 11 | 12 | 2 | Child 2.2

要获得父节点的所有子节点,您

SELECT * WHERE lft IS BETWEEN parent.lft AND parent.rgt

为了得到孩子的数量,这是

(right - left - 1)/2

为了让一个节点及其所有祖先回到根节点,你

SELECT * WHERE node.lft IS BETWEEN lft AND rgt

正如您所看到的那样,查询将是递归的并且过于缓慢

普通的树突然很快.漂亮,不是吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值