前段時間發表了一個刪除欄目的隨筆,當時實現的功能是刪除一條訊息,這次來實現一下批量刪除欄目。
我們需要達到的是這樣一個效果:
#選取批次刪除按鈕後可以選取所有該頁面的欄目,這個是前端頁面的實現,這裡就不多說了,我們直接進入正題:批量刪除的功能。
1.前端頁面這裡也有一個小小的點,就是選擇框的name值應給給他賦值為一個id的數組,value值為該欄目的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,這樣可以直接進行delete操作。
這就是我們dump出來options的結果,這條也是我們用來判斷刪除時是單一刪除還是批次刪除的依據,如果options[where][id]是一個陣列的話,則說明進行的是批次刪除,否則就是單一刪除。
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中文網其他相關文章!