Перейти к содержанию

Вложенные запросы

create: { data } | [{ data1 }, { data2 }, ...{ dataN }] — добавляет новую связанную запись или набор записей в родительскую запись. create доступен при создании (create) новой родительской записи или обновлении (update) существующей родительской записи

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const user = await prisma.user.create({
    data: {
        email,
        profile: {
            // вложенный запрос
            create: {
                first_name,
                last_name,
            },
        },
    },
});

createMany: [{ data1 }, { data2 }, ...{ dataN }] — добавляет набор новых связанных записей в родительскую запись. createMany доступен при создании (create) новой родительской записи или обновлении (update) существующей родительской записи

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
const userWithPosts = await prisma.user.create({
    data: {
        email,
        posts: {
            // !
            createMany: {
                data: posts,
            },
        },
    },
});

update: { data } | [{ data1 }, { data2 }, ...{ dataN }] — обновляет одну или более связанных записей

1
2
3
4
5
6
7
8
9
const user = await prisma.user.update({
    where: { email },
    data: {
        profile: {
            // !
            update: { age },
        },
    },
});

updateMany: { data } | [{ data1 }, { data2 }, ...{ dataN }] — обновляет массив связанных записей. Поддерживается фильтрация

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
const result = await prisma.user.update({
    where: { id },
    data: {
        posts: {
            // !
            updateMany: {
                where: {
                    published: false,
                },
                data: {
                    like_count: 0,
                },
            },
        },
    },
});

upsert: { data } | [{ data1 }, { data2 }, ...{ dataN }] — обновляет существующую связанную запись или создает новую

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const user = await prisma.user.update({
    where: { email },
    data: {
        profile: {
            // !
            upsert: {
                create: { age },
                update: { age },
            },
        },
    },
});

delete: boolean | { data } | [{ data1 }, { data2 }, ...{ dataN }] — удаляет связанную запись. Родительская запись при этом не удаляется

1
2
3
4
5
6
7
8
const user = await prisma.user.update({
    where: { email },
    data: {
        profile: {
            delete: true,
        },
    },
});

deleteMany: { data } | [{ data1 }, { data2 }, ...{ dataN }] — удаляет связанные записи. Поддерживается фильтрация

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
const user = await prisma.user.update({
    where: { id },
    data: {
        age,
        posts: {
            // !
            deleteMany: {},
        },
    },
});

set: { data } | [{ data1 }, { data2 }, ...{ dataN }] — перезаписывает значение связанной записи

1
2
3
4
5
6
7
8
9
const userWithPosts = await prisma.user.update({
    where: { email },
    data: {
        posts: {
            // !
            set: newPosts,
        },
    },
});

connect — подключает запись к существующей связанной записи по идентификатору или уникальному полю

1
2
3
4
5
6
7
8
9
const user = await prisma.post.create({
    data: {
        title,
        content,
        author: {
            connect: { email },
        },
    },
});

connectOrCreate — подключает запись к существующей связанной записи по идентификатору или уникальному полю либо создает связанную запись при отсутствии таковой;

disconnect — отключает родительскую запись от связанной без удаления последней. disconnect доступен только если отношение является опциональным.

Комментарии