일부 웹 사이트 프로젝트를 수행할 때 이러한 문제가 발생합니다. 열을 삭제하면 이 열이 맨 아래 열이 아닙니다. 즉, 삭제된 열에 하위 열이 있습니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!