少し前に、列の削除に関するエッセイを公開しました。そのときに実装された機能は、情報を一括で削除することでした。
達成する必要があるのは次のような効果です:
バッチ削除ボタンを選択した後、これはフロントエンド ページの実装です。ここでは詳細には触れませんが、本題の一括削除機能に進みましょう。
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 のように、削除操作を直接実行します。
これは、オプションのダンプの結果であり、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 が多数存在します。取得したため、ここで重複を削除する必要があります。操作には、array_unique() 関数を使用します。最後に、配列を再度分割して ID 文字列を取得し、それを削除すれば完了です。
以上がThinkPHP で列を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。