Donc j'essaye d'effectuer quelques insertions à la fois qui sont un peu dépendantes les unes des autres. Disons que je fais un site Web de notation de chien. N'importe qui peut ajouter un chien à ma base de données, mais en faisant cela, il doit également ajouter une évaluation préliminaire du chien. D'autres personnes peuvent ensuite évaluer le chien après. Les chiens aux notes est une relation de plusieurs à un: un chien a de nombreuses cotes.Question codeigniter/mySQL. Vérifier si plusieurs insertions sont possibles avant l'insertion réelle
Cela signifie que pour mes additions préliminaires, puisque j'ai la personne à la fois évaluer et ajouter le chien, je dois prendre la note, et définir une clé étrangère à la clé primaire du chien. Pour autant que je sache, cela signifie que je dois effectivement ajouter le chien, puis vérifier la clé primaire de cette nouvelle addition, puis mettre cela dans mon classement avant l'insertion.
Maintenant, supposons que quelque chose se passe mal avec l'insertion de la note, que ce soit une chaîne trop longue ou quelque chose que j'ai oublié. Si la note a échoué, le chien a déjà été inséré, mais la note ne l'a pas été. Dans ce cas, j'aimerais que le chien n'ait pas été ajouté en premier lieu. Cela signifie-t-il que je dois écrire un code qui dit «si l'évaluation échoue, faire un retrait pour le chien» ou est-il un moyen de prédire quelle sera la clé pour le chien si tout se passe comme prévu. Existe-t-il un moyen de dire «tenir cet endroit», et si tout fonctionne, l'ajouter?
Toute aide serait grandement appréciée. Merci!!
Cela ne fonctionne que s'il a le bon type de table (innoDb ... et ainsi de suite). – SeanJA
Réponse éditée pour clarifier ce point. – Finbarr
Alors question: Puis-je ne pas utiliser mes modèles si je vais le faire de cette façon? Je cours des insertions sur quelques tables différentes, mais toutes dans la même base de données. Puis-je faire quelque chose comme $ dog_db = $ this-> load-> base de données ('dog', true); $ dog_db-> trans_start(); if ($ $ this-> dog-> insert ($ dog)) $ dog_db-> trans_rollback(); sinon $ dog_db-> trans_commit(); – Ethan