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`, ',')")]); } } }
/** * Update an existing entity * * @param Model $resource * @param array $input * @return mixed */ public function update(Model $resource, array $input) { // Sync original to prevent modified attribute, from the model, to be saved, // we only want to update the value of input $resource->syncOriginal(); $resource->update($input); return $resource; }