Ответ
Для фильтрации в Prisma используйте параметр where в запросах. Он позволяет задавать условия для выборки данных. Можно фильтровать по полям, отношениям и комбинировать условия.
Пример простой фильтрации:
// Фильтрация по одному полю
const users = await prisma.user.findMany({
where: {
age: { gt: 18 }
}
});
// Комбинированная фильтрация
const posts = await prisma.post.findMany({
where: {
AND: [
{ title: { contains: 'Prisma' } },
{ published: true }
]
}
});
Доступные операторы:
equals,notin,notInlt,lte,gt,gtecontains,startsWith,endsWithAND,OR,NOT
Для отношений используйте вложенные where:
const usersWithPosts = await prisma.user.findMany({
where: {
posts: {
some: {
likes: { gt: 100 }
}
}
}
}); Ответ 18+ 🔞
А, ну вот, опять про эту вашу фильтрацию в Prisma спрашивают. Ну что ж, слушай сюда, я тебе сейчас так объясню, что ты сам себе охуеешь от простоты, блядь.
Так, значит, есть у тебя эта штука — where. Это типа такой волшебный пендель, которым ты говоришь базе: «Эй, сука, дай мне только то, что мне надо, а не всю хуйню подряд!». Всё, что ты хочешь отфильтровать — пихаешь туда.
Вот смотри, самый простой пример, чтобы мозг не ебал:
// Найди мне всех пользователей, которым уже можно пиво покупать, а не молоко
const users = await prisma.user.findMany({
where: {
age: { gt: 18 } // gt — это «больше чем». То есть, старше 18, ёпта.
}
});
Видишь? Всё просто, как три копейки. Хочешь найти посты, где в заголовке есть «Prisma» и они опубликованы? Да хуй с ним, сделаем:
const posts = await prisma.post.findMany({
where: {
AND: [ // AND — это «и то, И ЭТО». Оба условия должны быть true, иначе нахуй не надо.
{ title: { contains: 'Prisma' } }, // contains — ищет кусок текста внутри, типа «содержит»
{ published: true } // ну и чтоб опубликован был, а не черновик какой-нибудь
]
}
});
А операторов там, блядь, овердохуища! Запомни главные, а то опять будешь как мартышлюшка в документации копаться:
equals,not— равно и НЕ равно. Очевидно же, в рот меня чих-пых.in,notIn— входит в список или, наоборот, выходит из него. «Дай мне пользователей с id 1, 2 или 5, а остальные пусть идут на хуй».lt,lte,gt,gte— меньше, меньше или равно, больше, больше или равно. Для цифр и дат.contains,startsWith,endsWith— для текста. Содержит, начинается с, заканчивается на. Пиздец как полезно.AND,OR,NOT— чтобы условия комбинировать. Собрал кучу проверок вAND— все должны сработать. ВOR— хоть одна.NOT— всё, кроме этого.
А теперь, внимание, ебушки-воробушки, самое вкусное — фильтрация по связям! Допустим, тебе нужны не просто пользователи, а только те, у кого есть посты с больше чем сотней лайков. Чувствуешь подвох? Подозрение ебать чувствую, что многие тут тупят.
const usersWithPosts = await prisma.user.findMany({
where: {
posts: { // Залезаем в связь 'posts', которая описана в схеме
some: { // some — значит, «найди таких юзеров, у которых ХОТЯ БЫ ОДИН пост удовлетворяет условию ниже»
likes: { gt: 100 }
}
}
}
});
Вот и всё! Никакой магии. Говоришь: «Эй, Prisma, дай мне юзеров, но только таких, у которых в связанных постах (posts) есть (some) хотя бы один, где лайков больше сотни». Она тебе таких и найдёт. А если постов таких нет — ну, извини, дружок, иди нахуй с пустым массивом.
Короче, не усложняй. where — твой главный инструмент, чтобы не тащить из базы тонны ненужного говна. Используй с умом, и будет тебе счастье.