Maison  >  Article  >  développement back-end  >  Comment supprimer une colonne ?

Comment supprimer une colonne ?

PHP中文网
PHP中文网original
2017-06-20 11:01:431891parcourir

Lorsque nous réalisons certains projets de sites Web, nous rencontrerons un tel problème. Supprimez une colonne, et cette colonne n'est pas la colonne du bas. C'est-à-dire que la colonne supprimée a des sous-colonnes. supprimez la commande column, vous devez supprimer la colonne et ses sous-colonnes ensemble, car nous ne pouvons pas laisser la sous-colonne être toujours affichée ou exister dans la base de données après la suppression de la colonne supérieure d'une classe. À ce stade, le problème. de suppression de colonne devient Coming.

Première image :

Il s'agit d'une simple page de gestion des droits. Sur l'image, les droits d'administrateur sont des droits de niveau supérieur, et la gestion des colonnes est. droits d'administrateur. Les sous-autorisations d'ajout de colonnes sont des sous-autorisations de gestion de colonnes. Pour une telle classification à trois niveaux, l'effet que nous souhaitons obtenir est : supprimer les autorisations d'administrateur, ainsi que toutes les autorisations de gestion et d'ajout de colonnes en dessous. sera supprimé en même temps ; supprimez les autorisations de gestion des colonnes, l'ajout de colonne sera également supprimé en même temps ; la suppression de l'autorisation d'ajout de colonne ne supprimera que la colonne elle-même.

La méthode d'implémentation suivante :

1. Il s'agit d'une simple méthode de suppression dans le contrôleur :

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. Nous pensons que le résultat de la suppression simultanée que nous souhaitons est en fait que lorsque nous choisissons de supprimer la colonne de niveau supérieur, le code nous aide d'abord à supprimer la sous-colonne la plus basse de la catégorie de colonne, puis supprime vers le haut dans l'ordre, et finalement la supprime. La colonne supérieure que nous avons sélectionnée, nous devons donc écrire une fonction pré-constructeur pour opera_before_delete($options) C'est la fonction qui nous est fournie par ThinkPHP. Son utilisation est d'exécuter cette fonction avant. nous exécutons la méthode delete, où $ options est l'information que nous voulons supprimer, en particulier un tableau à deux dimensions, le résultat est : ​​​​​​​​​​​​​​​​​​​​​​​                                                                                                                                                Pour la valeur id, vous devez uniquement obtenir $options['where']['id'], mais notez que si où dans le tableau est également un tableau, cela signifie que nous sommes effectuer une suppression par lots, qui est également une seule La différence entre la suppression et la suppression par lots, j'écrirai un autre article pour la présenter brièvement. Cette fois, nous n'écrirons que sur la suppression unique.

Tout d'abord, écrivez une méthode childid pour obtenir toutes les données. Le $priid ici est l'identifiant de la colonne que nous avons transmis à supprimer

Ensuite, recherchez. l'identifiant de la sous-colonne sous la colonne que nous voulons supprimer en fonction de toutes les données, et créez à nouveau une méthode getchildid pour obtenir tous les identifiants qui doivent être supprimés
1 public function childid($priid){2         $data = $this->select();3         return $this->getchildid($data,$priid);4     }

La récursivité est à nouveau utilisée ici, dans Après avoir interrogé les colonnes de niveau inférieur dans toutes les données, interrogez les colonnes de niveau inférieur des colonnes de niveau inférieur et enregistrez enfin les versions d'identifiant de toutes les sous-colonnes de la colonne dans le tableau ret et retour.
 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     }
Enfin, appelez

dans le constructeur pour séparer les numéros d'identification obtenus par des virgules, car la méthode delete ne peut plus être utilisée pour supprimer les données. Si If est utilisé, appeler à nouveau le constructeur deviendra une boucle infinie, nous devons donc exécuter des instructions SQL ici pour supprimer les données.
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     }
Ce qui précède représente tout le contenu supprimé dans une seule colonne.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn