Maison  >  Article  >  développement back-end  >  Solution pour insérer les mêmes données dans Thinkphp3.2

Solution pour insérer les mêmes données dans Thinkphp3.2

巴扎黑
巴扎黑original
2018-05-22 15:55:511553parcourir

L'éditeur suivant vous proposera un article qui résout parfaitement le problème de l'insertion des mêmes données dans Thinkphp3.2. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un coup d'œil.

Description du problème

Lors de l'insertion de données à l'aide de TP3.2 aujourd'hui, afin d'éviter d'insérer le mêmes données (les soi-disant mêmes données, sa clé primaire est la même ou le champ de l'index unique est le même), l'index que j'ai créé est comme indiqué ci-dessous, l'index de clé primaire est un champ à incrémentation automatique, il y a aucune possibilité de duplication, c'est-à-dire que l'index unique peut être dupliqué, ce que j'espère est que si les trois champs uid, année, mois et jour sont les mêmes, l'enregistrement actuel sera mis à jour.

Solution du problème

Quand nous avons été confrontés à un tel problème auparavant, nous, vous savez, MySQL fournit ON DUPLICATE KEY UPDATE ou REPLACE INTO pour résoudre ce problème.

Utiliser ON DUPLICATE KEY UPDATE

Avant d'insérer des données, il n'y a qu'un seul enregistrement dans le tableau, comme indiqué ci-dessous

L'instruction SQL est la suivante, lors de l'insertion d'un enregistrement, s'il est identique à l'enregistrement existant dans la table, mettez à jour l'enregistrement, sinon insérez l'enregistrement.

INSERT INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 3, 1) 
ON DUPLICATE KEY 
UPDATE 
`status` = 
VALUES
(`status`),
`updated_ts` = NOW();

Utilisez REPLACE INTO

Le code est le suivant :

Exécutez d'abord le code suivant pour insérer une donnée

REPLACE INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 2, 1)

L'effet est comme indiqué ci-dessous

Exécutez à nouveau le code suivant, le code inséré ci-dessus sera mis à jour

REPLACE INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 2, 5)

L'effet est comme indiqué ci-dessous

La différence entre ON DUPLICATE KEY UPDATE et REPLACE INTO

Lorsque la même valeur apparaît , ON DUPLICATE KEY UPDATE met à jour l'enregistrement existant et REPLACE INTO supprime l'enregistrement précédent et insère le nouvel enregistrement.

Solution dans Thinkphp3.2

Dans Thinkphp3.2, l'insertion est gérée de la même manière via le troisième paramètre de la fonction add() Problèmes de données.

La méthode add() dans Model.class.PHP appelle la méthode insert dans Db.class.php Dans la méthode insert, nous pouvons voir le code suivant :

<.>

Où $replace se trouve être le troisième paramètre de la méthode add.

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