いくつかの Web サイトのプロジェクトを実行すると、このような問題が発生します。この列は一番下の列ではありません。つまり、削除された列にはサブ列が含まれています。 Column コマンドでは、クラスの上位カラムを削除した後、サブカラムをデータベースに表示したり存在させたりすることはできないため、カラムとそのサブカラムを一緒に削除する必要があります。このとき、カラムの問題が発生します。削除が生じます。
最初の写真:
これは単純な権限管理ページです。この図では、管理者権限がトップレベルの権限、列の管理が管理者権限のサブ権限、列の追加がそのサブ権限です。このような 3 レベルの分類では、管理者権限が削除されると、列管理権限と列追加権限も同時に削除されます。列追加権限も同時に削除されます。列追加権限が削除されると、列追加権限も同時に削除されます。
次の実装方法:
1. コントローラー内の単純な削除メソッドです:
1 public function privilege_del(){2 $pri = D('privilege');3 $id = I('id');4 if($pri->delete($id)){5 $this->success('删除权限成功!',U('Privilege/privilege_lst'));6 }else{7 $this->error('删除权限失败!');8 }9 }
2. 考えてみると、実際に必要な同時削除の結果は次のとおりです。削除する上位列の場合、コードは最初に列カテゴリの最下位のサブ列を削除し、次にそれを上に削除し、最後に選択した上位レベルの列を削除するため、operate_before_delete へのプレコンストラクターを記述する必要があります。 ($options) これは ThinkPHP が提供する関数です。その使用法は、delete メソッドを実行する前にこの関数を実行することです。$options は削除したい情報、具体的には $options をダンプするときの 2 次元配列です。結果は次のようになります:
つまり、この情報の ID 値を取得したい場合は、$ options ['where'] ['id'] を取得するだけで済みますが、配列も 1 つも 1 つ 配列に関しては、一括削除を実行することを意味します。これは、単一削除と一括削除の違いでもあります。一括削除については、後で別の記事で簡単に紹介します。今回は単体削除についてのみ書きます。
まず、メソッド childid を書いて、すべてのデータを取得します。ここでの $priid は、削除したい列の ID です
1 public function childid($priid){2 $data = $this->select();3 return $this->getchildid($data,$priid);4 }
そして、すべてに基づいて、削除したい列の下のサブ列を見つけます。データ ID を取得するには、メソッド getchildid を再度作成して、削除する必要があるすべての ID を取得します
1 public function getchildid($data,$parentid){ 2 static $ret=array(); 3 foreach ($data as $k => $v) { 4 if($v['parentid']==$parentid){ 5 $ret[]=$v['id']; 6 $this->getchildid($data,$v['id']); 7 } 8 } 9 return $ret;10 }
すべてのデータの下位列をクエリした後、その下位列の下位列をクエリし、最後にすべてのデータをクエリします。列のサブ列 ID バージョンは ret 配列に格納され、返されます。
最後にコンストラクター内で
1 public function _before_delete($options){2 //单个删除3 $chilrenids =$this->childid($options['where']['id']);4 $chilrenids = implode(',', $chilrenids); 5 if($chilrenids){6 $this->execute("delete from ed_privilege where id in($chilrenids)");7 }8 }
を呼び出して、取得した ID 番号をカンマで区切ります。この時点では、delete メソッドを使用してデータを削除することはできません。使用すると、コンストラクターが再度呼び出され、無限になります。ループするため、データを削除するにはここで SQL ステートメントを実行する必要があります。
上記は、単一の列から削除されたすべての内容です。
以上が列を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。