public function updated(Model $model)
{
if ($model->isDirty('parent_id')) {
/**
* 同步Original数据,是為了清除parent_id的dirty狀態
*/
$model->syncOriginal();
$tableName = $model->getTable();
$oldNode = $model->getOriginal('node');
if (0 < $model->parent_id) {
/**
* @var Model $parent
*/
$parent = $model->find($model->parent_id);
$model->node = $parent->node . $model->id . self::SEPARATOR;
$model->save();
//取出原来的level
$originalLevel = Cache::pull('node-category-original-level-' . $model->id);
//计算新level与原来的level的差值
$i = $model->level - $originalLevel;
DB::table($tableName)->where('node', 'like', $oldNode . '%')->where('id', '<>', $model->id)->update(['level' => DB::raw("level + {$i}"), 'node' => DB::raw("REPLACE(`node`, '{$oldNode}', '{$model->node}')")]);
} else {
//修改為頂級分類
$model->level = 1;
$model->node = self::SEPARATOR . $model->id . self::SEPARATOR;
$model->save();
DB::table($tableName)->where('node', 'like', $oldNode . '%')->where('id', '<>', $model->id)->update(['level' => DB::raw("level - {$model->level}"), 'node' => DB::raw("CONCAT('{$model->node}', `id`, ',')")]);
}
}
}