譬如我想获得id为10的小黑猪的最终父类,在该表格中parent_id显示的是9,但我想获得的是5,请问有没有什么办法,或者说我想判断某一条记录是否属于该最终父类
譬如我想获得id为10的小黑猪的最终父类,在该表格中parent_id显示的是9,但我想获得的是5,请问有没有什么办法,或者说我想判断某一条记录是否属于该最终父类
$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);
** 父->子->孙->..... 递归查询,在model中定义一下(个人觉得效率不行):
protected $appends = [
'children'
];
public function getChildrenAttribute()
{
return $this->select('name as label', 'id')->where('parent_id', $this->attributes['id'])->get();
}
2 回答1.3k 阅读✓ 已解决
1 回答975 阅读✓ 已解决
2 回答843 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
2 回答899 阅读
1 回答886 阅读
1 回答817 阅读
有2种做法可以尝试:
把所有的id和parent_id查询出来,然后进行搜索,这样固定的sql语句可以进行缓存。
添加一个新字段root_id,用于记录根节点,这样就不需要搜索,直接查询即可,只是在插入的时候,需要查询一次。