ホームページ  >  記事  >  バックエンド開発  >  列を削除するにはどうすればよいですか?

列を削除するにはどうすればよいですか?

PHP中文网
PHP中文网オリジナル
2017-06-20 11:01:431891ブラウズ

いくつかの 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。