isDirty('pid')) { $nodes = self::byIdGetParentIds($bankCategory->id); $nodes = '-' . arr2str($nodes, '-') . '-'; DB::table('exam_bank_categories')->where('id', $bankCategory->id)->update(['nodes' => $nodes]); } }); } public function parent() { return $this->belongsTo(self::class, 'pid'); } public function children() { return $this->hasMany(self::class, 'pid'); } public function setNodesAttribute($val) { $val = arr2str($val, '-'); $this->attributes['nodes'] = "-{$val}-"; } public static function byIdGetParentIds($id) { $ids = [$id]; $pid = self::query()->where('id', $id)->value('pid'); if ($pid) { $pid = self::byIdGetParentIds($pid); $ids = array_merge($ids, $pid); } return $ids; } }