少し前に、列の削除に関するエッセイを公開しました。そのときに実装された機能は、情報を一括で削除することでした。
達成する必要があるのは次のような効果です:
バッチ削除ボタンを選択した後、これはフロントエンド ページの実装です。ここでは詳細には触れませんが、本題の一括削除機能に進みましょう。
1. フロントエンド ページにも小さなポイントがあります。つまり、選択ボックスの名前の値には ID の配列を割り当てる必要があり、値の値は列の ID です。
2. コントローラーに別個のバッチ削除メソッドを記述します
public function privilege_bdel(){ $ids = I('ids'); $pri = D('privilege'); $ids = implode(',', $ids); if($ids){ if($pri->delete($ids)){ $this->success('批量删除栏目成功!',U('Privilege/privilege_lst')); }else{ $this->error('批量删除栏目失败,请重试!'); } }else{ $this->error('未选中任何内容,请重试!'); } }
これは、削除が単一の削除であるか、単一の削除であるかを決定するためにも使用されます。 options[where][id] が配列の場合は一括削除が実行され、それ以外の場合は単一削除が行われます。
3. モデル内の削除前にコンストラクターを変更します
public function _before_delete($options){ //批量删除 if(is_array($options['where']['id'])){ $arr = explode(',', $options['where']['id'][1]); $sonpri = array(); foreach ($arr as $k => $v) { $sonpri2 = $this->childid($v); $sonpri = array_merge($sonpri,$sonpri2); } $sonpri = array_unique($sonpri); $chilrenids = implode(',', $sonpri); }else{//单个删除 $chilrenids =$this->childid($options['where']['id']); $chilrenids = implode(',', $chilrenids); } if($chilrenids){ $this->execute("delete from ed_privilege where id in($chilrenids)"); } }
渡された文字列をカンマなしの配列に変換し、$arr に格納し、空の配列 $sonpri を作成し、それを foreach で走査します。まず、すべてのサブ列 ID を (childid 関数を使用して) 見つけて、$sonpri2 配列に格納します。次に、$sonpri と $sonpri2 を配列にマージし、array_merge() 関数を使用して完成させます。列 ID はすべてのサブ列 ID を取得できますが、取得した ID グループには重複する ID が多数あるため、ここでも array_unique() 関数を使用して複製操作を実行する必要があります。最後に、配列を再度分割して ID 文字列を取得し、それを削除すれば完了です。
以上がTp を使用して列を削除しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。