sql >> データベース >  >> RDS >> Database

Prismaの一意キーに複数のフィールドを使用する

    Prismaで問題が発生し、少し時間が失われたので、どのように解決したかを書きます。

    モデルにidがありませんでした @idとしてマークされたフィールド そこで、@@unique()を追加しました userと言う およびtweet 、一緒に、uniqueを定義しました 制約します。

    model Like {
      user      Int
      tweet     Int
      createdAt DateTime @default(now())
      @@unique([user, tweet])
    }

    つまり、(user, tweet)の同じエントリを複数持つことはできません。 エントリ。

    でエントリを削除しようとしたとき
    await prisma.like.delete({
      where: {
        user: 1,
        tweet: 1
      }
    })

    エラーメッセージが表示されます:

    PrismaClientValidationError: 
    Invalid `prisma.like.delete()` invocation:
    
    {
      where: {
        user: 12,
        ~~~~
        tweet: 22
        ~~~~~
      }
      ~~~~~~~~~~~
    }
    
    Argument where of type LikeWhereUniqueInput needs exactly one argument, but you provided user and tweet. Please choose one. Available args: 
    type LikeWhereUniqueInput {
      user_tweet?: LikeUserTweetCompoundUniqueInput
    }

    私がしなければならなかったのは変化でした

    await prisma.like.delete({
      where: {
        user: 1,
        tweet: 1
      }
    })

    await prisma.like.delete({
      where: {
        user_tweet: {
          user: 1,
          tweet: 1
        }
      }
    })

    つまり、それらを連結する一意のフィールドをアンダースコアと組み合わせます。

    振り返ってみると、エラーメッセージはこれを説明するようなものでしたが、わかりませんでした。


    1. MySQLレプリケーションを使用したMoodleの高可用性データベースの構築

    2. MySQLのスキーマ/データベースの違い

    3. ARMベースのDebianデバイス用のOracleInstantClient

    4. 断続的なODBC接続の失敗