2012-05-05 3 views
4

Permettez-moi d'abord expliquer la structure de la table:Codeigniter contrainte de clé étrangère vérifier

+-----------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-----------+--------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| firstname | varchar(255) | NO |  | NULL |    | 
| name  | varchar(255) | NO |  | NULL |    | 
+-----------+--------------+------+-----+---------+----------------+ 

Le champ id est référencé à partir d'une autre table par une clé étrangère.

Dire que j'ai une fonction dans mon modèle comme celui-ci:

public function delete_user($id) { 
    return $this->db->delete('users', array('id' => $id)); 
} 

Lorsque cet utilisateur est référencé à partir de l'autre table, il faut jeter une erreur. La « mauvaise » chose est que Codeigniter montre en fait cette erreur sur une pleine page:

Error Number: 1451 

Cannot delete or update a parent row: a foreign key constraint fails (`testing`.`users_link`, CONSTRAINT `users_link_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)) 

DELETE FROM `users` WHERE `id` = '1' 

Y at-il un moyen de rendre la fonction delete_user retourne FALSE au lieu de montrer l'erreur? J'aimerais informer l'utilisateur qu'il doit d'abord faire quelque chose d'autre. J'ai essayé d'utiliser des transactions et de retourner le transaction_status, mais cela renvoie l'erreur.

+0

bien vous devez modifier la fonction de suppression – Satya

+0

J'ai trouvé la réponse moi-même: $ db ['default'] ['db_debug'] = FALSE; Rappelez-vous que dans Codeigniter 3.0 (CI3), ceci est maintenant '$ errors = $ this-> db-> error();' – EsTeGe

Répondre

6

dans le fichier config.php trouver la ligne

$db['default']['db_debug'] 

et mis à FAUX. Cela empêchera Codeigniter d'imprimer l'erreur sur l'écran.

également dans la fonction de suppression, vous pouvez vérifier:

if ($this->db->_error_number() == 1451) 

Si vous devez faire lorsque cela se produit quelque chose de spécial.

+2

Si vous recherchez la ligne '$ db ['default'] ['db_debug']', elle se trouve dans '/ application/config/database.php' si vous utilisez l'environnement par défaut. – CodeGodie

+0

Si vous 'les erreurs ne sont plus affichés afin que je puisse afficher mes messages d'erreur personnalisés :) –

Questions connexes