この記事では主に ThinkPHP の列を一括削除する方法を紹介します。興味のある方はぜひ参考にしてください。
達成する必要があるのは次の効果です:
これは、ページのすべての列を選択できるようになります。ここでは詳細には触れません。早速、一括削除の機能について説明します。
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('未选中任何内容,请重试!'); } }
ここでは、渡された ID 配列を次のようなカンマ区切りの文字列に変換する必要があります: 1,2,3, これにより、直接削除操作。
これは、オプションのダンプの結果であり、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 グループにあるので、ここでも重複を削除するには、array_unique() 関数を使用します。最後に、配列を再度分割して ID 文字列を取得し、それを削除すれば完了です。
関連する推奨事項:
以上が列の一括削除を実装する ThinkPHP メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。