얼마 전 컬럼 삭제에 대한 에세이를 올렸는데요. 당시 구현된 기능은 정보의 일부를 삭제하는 기능이었습니다. 이번에는 컬럼을 일괄 삭제하겠습니다.
우리가 달성해야 할 것은 다음과 같은 효과입니다.
일괄 삭제 버튼을 선택한 후 페이지의 모든 열을 선택할 수 있습니다. 이것이 바로 프런트 엔드 페이지의 구현입니다. 자세한 내용은 여기서 다루지 말고, 일괄 삭제 기능에 대해 직접 살펴보겠습니다.
1 여기 프런트엔드 페이지에도 작은 점이 있습니다. 즉, 선택 상자의 이름 값에 id 배열이 할당되어야 하고 값 값은 열의 id입니다.
2 컨트롤러에 별도의 일괄 삭제 방법을 작성합니다
1 public function privilege_bdel(){ 2 $ids = I('ids'); 3 $pri = D('privilege'); 4 $ids = implode(',', $ids); 5 if($ids){ 6 if($pri->delete($ids)){ 7 $this->success('批量删除栏目成功!',U('Privilege/privilege_lst')); 8 }else{ 9 $this->error('批量删除栏目失败,请重试!');10 }11 }else{12 $this->error('未选中任何内容,请重试!');13 }14 }
여기서 전달된 ID 배열을 1,2,3과 같은 쉼표로 구분된 문자열로 변환해야 합니다. 작업을 직접 삭제하세요.
이것은 삭제가 단일 삭제인지 일괄 삭제인지 판단하는 기준이기도 합니다. 수행되는 작업은 일괄 삭제이고, 그렇지 않으면 개별적으로 삭제됩니다.
3. 모델에서 삭제 전 생성자 수정
1 public function _before_delete($options){ 2 //批量删除 3 if(is_array($options['where']['id'])){ 4 $arr = explode(',', $options['where']['id'][1]); 5 $sonpri = array(); 6 foreach ($arr as $k => $v) { 7 $sonpri2 = $this->childid($v); 8 $sonpri = array_merge($sonpri,$sonpri2); 9 }10 $sonpri = array_unique($sonpri);11 $chilrenids = implode(',', $sonpri);12 }else{//单个删除13 $chilrenids =$this->childid($options['where']['id']);14 $chilrenids = implode(',', $chilrenids);15 }16 if($chilrenids){17 $this->execute("delete from ed_privilege where id in($chilrenids)");18 }19 }
여기서 일괄 삭제를 위한 코드를 작성합니다(단일 삭제는 이전에 작성되었으며 다시 언급되지 않습니다)
전달된 문자열을 배열 형식으로 변환합니다. 쉼표 없이 $arr에 저장됩니다. 빈 배열 $sonpri를 만든 다음 foreach를 사용하여 이를 탐색합니다. 여기서 먼저 모든 하위 열 ID(childid 함수가 사용됨)를 찾아 $sonpri2 배열에 저장합니다. 그런 다음 $sonpri를 추가하면 $sonpri2가 배열로 병합되고 array_merge() 함수를 사용하여 완료됩니다. 이러한 방식으로 모든 하위 열의 ID를 얻을 수 있습니다. 그러나 ID 그룹에는 중복된 ID가 많이 있습니다. 얻었으므로 여기서 중복된 항목을 제거해야 합니다. 작업을 위해서는 array_unique() 함수를 사용하세요. 마지막으로 배열을 다시 분할하여 ID 문자열을 얻은 다음 삭제하면 완료됩니다.
위 내용은 ThinkPHP에서 열을 삭제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!