それはPrisma時間です-挿入


歓迎する人々
今日はデータベースにいくつかのレコードを追加する時です😁 だから時間を無駄にしないでくださいあなたの手を汚す.
では、作者を追加する簡単なインサートから始めましょうsrc/index.ts 次の例をコピーします.
import { PrismaClient } from "@prisma/client";

async function main() {
  const prisma = new PrismaClient();
  try {
    const newAuthor = await prisma.author.create({
      data: {
        firstName: "John",
        lastName: "Doe",
      },
    });
    console.log({ newAuthor });
  } catch (error) {
    console.error(error);
    throw error;
  } finally {
    await prisma.$disconnect();
  }
}

main();
このコードでは、著者を追加する簡単な挿入を作成しました.
特許を使うことによってprisma.[entity].create DBにエンティティを挿入できますが、次の2つのスクリプトを実行する際にこのコードを見ましょう
npx prisma db push
yarn dev
{ newAuthor: { id: 1, firstName: 'John', lastName: 'Doe' } }
あなたが見ることができるように、それは記録を挿入するのはそれほど難しくありません、しかし、それは挿入を次のレベルに取る時間です.
1つのコメントを1つの実行で挿入するにはどうすればよいのでしょうか?
さて、次のコードを次のコードに追加しますconsole.log({ newAuthor }); .
...
const newPost = await prisma.post.create({
  data: {
    title: "First Post",
    content: "This is the first post",
    published: false,
    comments: {
      create: {
        text: "First comment",
        author: {
          connect: {
            id: newAuthor.id,
          },
        },
      },
    },
  },
  include: {
    comments: true,
  },
});

console.log("newPost", JSON.stringify(newPost, null, 4));
...
を使ってコードを実行する
npx prisma db push
yarn dev
その後、この結果を見ることができます
newPost {
    "id": 7,
    "title": "First Post",
    "content": "This is the first post",
    "published": false,
    "createAt": "2021-12-18T12:29:20.982Z",
    "updatedAt": "2021-12-18T12:29:20.982Z",
    "comments": [
        {
            "id": 7,
            "text": "First comment",
            "postId": 7,
            "authorId": 7
        }
    ]
}
でもどうなった?
このコードを実行すると、データベースにポストとこのポストに関連するコメントを1つのコマンドで追加しました.私は、それがOrmで一般的な特徴であると私に同意すると思います.しかし、CREATEメソッドとそのパラメータを見てみましょう.
から始めましょうdata このフィールドでは、エンティティに関連するすべてのフィールドを示すことができます.前の例のコメントエンティティで行ったように、エンティティフィールドを言うときは、自分自身のフィールドを参照しています.
しかし、この例では別の詳細を見てみましょう.あなたのポストに関連するコメントを追加するには、コードのこのスニペットを使用して
...
comments: {
  create: {
    text: "First comment",
    author: {
      connect: {
        id: newAuthor.id,
      },
    },
  },
},
...
我々の注意に来る最初のものは、作成フィールドです.このフィールドはコメントエンティティのフィールドではなく、prismaのコマンドです.使用create コマンドを使用すると、コメントテーブルに新しいレコードを挿入するようにすることができます.コメントに関連するデータは、説明したCreateオブジェクトの内部に表示されます.OKしかし、フィールドの著者の中に別の特徴があるこのオブジェクトを調べましょう.内部に見ることができるようにconnect , でもなんだろう?The connect フィールドはPrismaの別のコマンドです.このコマンドは、著者のレコードが既にデータベースに存在し、それを作成してはいけませんが、コメントレコードと著者レコードの間のリンクを作成するだけであることを示します.
Prismaのエンティティの挿入を管理するための別のコマンドがありますconnectOrCreate . このコマンドは、相対レコードが存在しているかどうかを確認することができます.この場合、Prismaはエンティティ間のリンクを作成します.そうでなければPrismaはこの新しいレコードを作成します.例をあげるために、著者はコマンドの書き換えをconnectOrCreate .
author: {
  connectOrCreate: {
    create: {
      lastName: "Last name",
      firstName: "First name",
    },
    where: {
      id: newAuthor.id,
    },
  },
},
新しいレコードを挿入すると、データベース内のすべてのCRUD操作がトランザクションの下で行われますので、挿入時に3つのサブエンティティを持つエンティティがある場合は、すべての操作が成功した場合のみ成功結果を取得します.そうでないとエラーが発生し、データベースが実行前にクリーンになります.
また、あるcreateMany コレクション内のバルクインサートを行う方法.それは、それとそれほど異なりませんcreate メソッド.ドキュメントへのリンクを残しますhere .
NB CreateMany SQLiteでサポートされていない、Prismaは、そのときに、クライアントの定義を生成するのに役立ちます、それは現在のコネクタを検出し、唯一の定義は、コネクタ
最後になりますが、PrismaはタイプセーフなコンテキストでCreateメソッドを呼び出す方法を説明します.次にこのタイプのレビューを挿入する
import { Prisma, PrismaClient } from "@prisma/client";

...
const authorCreate: Prisma.AuthorCreateArgs = {
      data: {
        firstName: "John",
        lastName: "Doe",
      },
    };

    const newAuthor = await prisma.author.create(authorCreate);
...
Prismaは、この作業をあなたがprisma.schema ファイルとそれはちょうどこれを作りません、しかし、我々は次の記事でこれに深く行きます.
私は、今日、あなたがPrismaで挿入物について多くの概念を持っていると思います.あなたがPrismaで挿入物の深さに入ることに興味があるならばhere 公式ドキュメントへのリンク.
それはみんなです.
次の記事では削除操作を見ます.
また近いうちに.
バイバイ👋
この記事のコードを見つけることができますhere