laravel的Baum怎么获得某一条记录的最终父类id

发布于 2022-09-07 12:30:26 字数 162 浏览 27 评论 0

譬如我想获得id为10的小黑猪的最终父类,在该表格中parent_id显示的是9,但我想获得的是5,请问有没有什么办法,或者说我想判断某一条记录是否属于该最终父类

图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

猫瑾少女 2022-09-14 12:30:27

有2种做法可以尝试:

  1. 把所有的id和parent_id查询出来,然后进行搜索,这样固定的sql语句可以进行缓存。

  2. 添加一个新字段root_id,用于记录根节点,这样就不需要搜索,直接查询即可,只是在插入的时候,需要查询一次。

醉南桥 2022-09-14 12:30:27
    $arr = array(
                array(
                    'id'        => 10,
                    'parent_id' => 9
                    ),
                array(
                    'id'        => 9,
                    'parent_id' => 5
                    ),
                array(
                    'id'        => 5,
                    'parent_id' => null
                    ),
        
        
        );
    function getParentId($arr, $id = 10) {
        foreach ($arr as $val) {
            if($val['id'] == $id) {
                if(!empty($val['parent_id'])) {
                    $id = $val['parent_id'];
                    getParentId($arr, $id);
                }else {
                    return $id;
                }
            }
        }
        return $id;
    }
    
    echo getParentId($arr, 10);
梦情居士 2022-09-14 12:30:27

** 父->子->孙->..... 递归查询,在model中定义一下(个人觉得效率不行):


protected $appends = [
    'children'
];

public function getChildrenAttribute()
{
    return $this->select('name as label', 'id')->where('parent_id', $this->attributes['id'])->get();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文