열을 삭제하는 방법은 무엇입니까?

PHP中文网
풀어 주다: 2023-03-10 20:42:01
원래의
1843명이 탐색했습니다.

일부 웹 사이트 프로젝트를 수행할 때 이러한 문제가 발생합니다. 열을 삭제하면 이 열이 맨 아래 열이 아닙니다. 즉, 삭제된 열에 하위 열이 있습니다. Column 명령의 경우, 클래스의 상위 열이 삭제된 후에도 데이터베이스에 하위 열이 계속 표시되거나 존재하도록 할 수 없기 때문에 해당 열과 해당 하위 열을 함께 삭제해야 합니다. 삭제가 발생합니다.

첫 번째 사진 :

간단한 권한 관리 페이지입니다. 사진에서 관리자 권한은 최상위 권한이고, 컬럼 관리는 관리자 권한의 하위 권한이며, 컬럼 추가는 하위 권한입니다. 이러한 3단계 분류의 경우 달성하려는 효과는 다음과 같습니다. 관리자 권한이 삭제되면 열 관리 권한과 열 추가 권한이 동시에 삭제됩니다. 열 추가 권한도 동시에 삭제되며, 열 추가 권한도 동시에 삭제됩니다.

다음 구현 방법:

1. 컨트롤러에서 간단한 삭제 방법입니다:

1     public function privilege_del(){2         $pri = D('privilege');3         $id = I('id');4         if($pri->delete($id)){5             $this->success('删除权限成功!',U('Privilege/privilege_lst'));6         }else{7             $this->error('删除权限失败!');8         }9     }
로그인 후 복사

2. 생각해보면 우리가 원하는 동시 삭제의 결과는 실제로는 선택했을 때입니다. 삭제할 상위 열 때 코드는 먼저 열 범주의 가장 낮은 하위 열을 삭제하는 데 도움을 준 다음 위쪽으로 삭제하고 마지막으로 선택한 상위 수준 열을 삭제하므로 Operate_before_delete에 대한 사전 생성자를 작성해야 합니다. ($options) 이것은 ThinkPHP가 제공하는 기능으로, delete 메소드를 실행하기 전에 이 기능을 실행하는 것입니다. 여기서 $options는 삭제하려는 정보, 특히 $options를 덤프할 때 2차원 배열입니다. 결과는 다음과 같습니다.

즉, 이 정보의 ID 값을 얻으려면 $ options ['where'] ['id']만 얻으면 됩니다. 배열도 하나의 배열이라고 하면 일괄삭제를 한다는 뜻인데, 이는 단일삭제와 일괄삭제의 차이이기도 합니다. 단일 삭제에 대해서만 작성합니다.

 먼저 모든 데이터를 가져오는 childid 메소드를 작성하세요. 여기서 $priid는 삭제하려는 열의 ID입니다.

1 public function childid($priid){2         $data = $this->select();3         return $this->getchildid($data,$priid);4     }
로그인 후 복사

 그런 다음 모든 데이터를 기반으로 삭제하려는 열 아래의 하위 열을 찾습니다. 데이터 ID를 삭제해야 하는 모든 ID를 가져오기 위해 다시 getchildid 메소드를 생성합니다.

 1 public function getchildid($data,$parentid){ 2         static $ret=array(); 3         foreach ($data as $k => $v) { 4             if($v['parentid']==$parentid){ 5                 $ret[]=$v['id']; 6                 $this->getchildid($data,$v['id']); 7             } 8         } 9         return $ret;10     }
로그인 후 복사

다시 모든 데이터의 하위 열을 쿼리한 후 하위 열의 하위 열을 쿼리하고 마지막으로 모든 데이터를 쿼리합니다. 열의 하위 열 ID 버전은 ret 배열에 저장되어 반환됩니다.

마지막으로 생성자에서

1      public function _before_delete($options){2         //单个删除3         $chilrenids =$this->childid($options['where']['id']);4         $chilrenids = implode(',', $chilrenids);    
5         if($chilrenids){6             $this->execute("delete from ed_privilege where id in($chilrenids)");7         }8     }
로그인 후 복사

를 호출하여 얻은 ID 번호를 쉼표로 구분합니다. 이때 삭제 메서드를 더 이상 사용하여 데이터를 삭제할 수 없기 때문에 생성자가 다시 호출되어 무한이 됩니다. 루프이므로 데이터를 삭제하려면 여기에서 SQL 문을 실행해야 합니다.

위 내용은 한 열에서 모두 삭제된 내용입니다.

위 내용은 열을 삭제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!