CodeIgniter - active d'insertion d'enregistrements si nouvelle ou mise à jour sur un double
Est-il possible de faire un active record requête dans CodeIgniter qui permettra de mettre à jour un enregistrement existant si il en existe déjà un ou insérer si elle ne marche pas, pour la clé donnée?
Je comprends ce qui pourrait être fait par la première requête pour trouver un enregistrement existant, mais je suis à la recherche de la méthode la plus efficace.
- vérifier si l'élément possède l'id ou pas lorsqu'il est soumis
Vous devez vous connecter pour publier un commentaire.
Fondamentalement, ce que vous cherchez peut-être ce
INSÉRER ... SUR un DOUBLE de la CLÉ de mise à JOUR
- à condition que vous utilisez MySQL et votre id est une clé unique sur la table.Vous auriez à construire manuellement la requête et passer à la
$this->db->query()
fonction au lieu de construit dans active record comme des fonctions d'assistance du Pilote de base de données.Exemple:
Si vous utilisez Codeigniter 3.0 ou supérieur, vous pouvez envisager d'utiliser "$this->db->remplacer()". Selon le guide de l'utilisateur:
"Cette méthode exécute une instruction de remplacement, qui est essentiellement la norme SQL (facultatif) DELETE + INSERT, en utilisant PRIMAIRES et les clés UNIQUES comme le facteur déterminant. Dans notre cas, il va vous sauver de la nécessité de mettre en œuvre des logiques complexes avec différentes combinaisons de select(), update(), delete() et insert() appelle."
En d'autres termes,
Viens de l'utiliser tout droit sorti de la boîte comme:
Pas de piles!!!
Je ne sais pas Codeigniter Active Record de Classe a de cette méthode ou de ne pas vérifier la codeigniter docs pour les méthodes contenant, à l'enregistrement actif de la classe
Mais vous pouvez obtenir ce par l'extension de modèles de base de codigniter.
En utilisant cette façon, vous pouvez utiliser cette méthode pour tous les modèles qui s'étend ce modèle de la classe.
Il suffit de placer le
MY_model.php
en application/core/et écrire le code suivant.après la création du fichier ci-dessus, Vous devez changer la à Tous vos modèles de classe parent pour le nouveau modèle c'est à dire MY_Model
NOTE: Vous devez sélectionner la clé primaire de résultats et le mettre dans la condition where.
C'est essentiel donc ce que je fais quand je reçois les données du contrôleur je viens de le vérifier à l'IDENTIFIANT ou pas si l'Id est présent, alors j'ai tiré la requête de mise à jour si non, alors j'ai tiré La Requête d'Insertion.
BONNE CHANCE
Vous pourriez faire plus simple:
Je suis en utilisant cette approche:
configurer votre table
mytable
avecunique id
etunique
clé pour lacolumn xyz
, que vous souhaitez mettre à jouressayez d'insérer un tableau
$data
, à l'aide deINSERT IGNORE INTO
faire éviter les doublonscela insère une ligne, si la valeur en
column xyz
n'existe pasutiliser la fonction
insert_id()
de retour d'unid
si la ligne a été insérée, la mise à jour si aucune ligne n'a été inséré.Ici est une méthode qui, je l'espère, peut accomplir la même
Mis à jour Milaza la réponse -
Tout simplement fait