Maison  >  Questions et réponses  >  le corps du texte

Comment mettre à jour plusieurs lignes avec des données différentes dans Prisma

Quelle est la meilleure façon de mettre à jour de nombreux enregistrements avec des données différentes ? C'est ce que je fais

const updateBody = JSON.parse(req.body);

      try {
        for (let object of updateBody) {
          await prisma.comissions.upsert({
            where: {
              producer: object.producer,
            },
            update: {
              rate: object.rate,
            },
            create: object,
          });
        }

Je pourrais le mettre à jour mais cela prendrait beaucoup de temps pour le faire. Je sais transaction, mais je ne sais pas comment l'utiliser.

P粉478445671P粉478445671299 Il y a quelques jours529

répondre à tous(1)je répondrai

  • P粉354602955

    P粉3546029552023-12-26 09:37:44

    Il existe deux façons d'utiliser les requêtes de transaction dans Prisma.

    Opérations séquentielles : Transmettez un tableau de requêtes client Prisma à exécuter séquentiellement au sein d'une transaction.

    Transactions interactives : Transmettez une fonction pouvant contenir du code utilisateur, y compris des requêtes client Prisma, du code non Prisma et d'autres flux de contrôle à exécuter dans la transaction.

    Dans notre cas, nous devrions utiliser une transaction interactive car elle contient du code utilisateur, pour utiliser la fonction de rappel dans la transaction Prisma, nous devons ajouter une fonction de prévisualisation au fichier Prisma.schema

    generator client {
      provider        = "prisma-client-js"
      previewFeatures = ["interactiveTransactions"]
    }
    prisma.$transaction(async(prisma) => {
      try {
            for (let object of updateBody) {
              await prisma.comissions.upsert({
                where: {
                  producer: object.producer,
                },
                update: {
                  rate: object.rate,
                },
                create: object,
              });
            }
    });

    répondre
    0
  • Annulerrépondre