コード例 #1
0
 /**
  * Remove single item or all descendant
  *
  * @param CategoryItem $item  item object
  * @param bool         $force if true then remove all descendant
  * @return bool
  */
 public function removeItem(CategoryItem $item, $force = true)
 {
     $count = 1;
     /** @var CategoryItem $desc */
     foreach ($item->descendants as $desc) {
         if ($force === true) {
             $desc->ancestors()->detach();
             $desc->descendants()->detach();
             $desc->ancestors()->newPivotStatement()->where($desc->getDescendantName(), $desc->getKey())->where($desc->getDepthName(), 0)->delete();
             $desc->delete();
             $count++;
         } else {
             // 하위 아이템을 삭제하지 않는 경우
             // 하위 아이템을 삭제할 대상 아이템의 부모 아이템의
             // 자식 아이템으로 변경해 줌
             $desc->descendants()->newPivotStatement()->where($desc->getDescendantName(), $desc->getKey())->where($desc->getAncestorName(), '!=', $item->getKey())->where($desc->getDepthName(), '>', 0)->decrement($desc->getDepthName());
             $parentId = ($parent = $item->getParent()) ? $parent->getKey() : null;
             $desc->{$desc->getParentIdName()} = $parentId;
             $desc->save();
         }
     }
     $result = $item->delete();
     // 아이템이 삭제되면 아이템이 속해있던 카테고리 그룹의 아이템 수량을 감소 시킴
     $item->category->decrement('count', $count);
     return $result;
 }