Запрос Prisma 2 для возврата только записей, которые связаны со ВСЕМИ из предоставленных идентификаторов тегов - PullRequest
2 голосов
/ 04 мая 2020

У меня есть таблицы Принципы и Теги. И между ними существует отношение «многие ко многим» ( присоединено неявно ).

Без использования prisma.raw, как я могу выполнить следующий запрос?

SELECT p.id, p.title, p.description, p.createdAt, p.modifiedAt
    FROM principle p
   WHERE EXISTS (SELECT NULL
                   FROM _PrincipleToTag pt
                  WHERE pt.B IN (${tagIds.join(',')})
                    AND pt.A = p.id
               GROUP BY pt.A
                 HAVING COUNT(DISTINCT pt.B) = ${tagIds.length})

Как я могу обновить этот запрос Prisma 2 так, чтобы возвращаемые принципы были только принципами, которые связаны со ВСЕМИ из предоставленных tagIds?

export const principles = ({ tagIds }) => {
  const payload = {
    where: {
      //TODO filter based on tagIds
    },
  }
  return db.principle.findMany(payload)
}

Документы упомяните contains и in и every, но я не могу найти примеры того, что я пытаюсь сделать.

Я использую Redwood Js, Prisma 2, Apollo, GraphQL.

1 Ответ

0 голосов
/ 04 мая 2020

Вы можете попробовать что-то вроде этого

export const principles = ({ searchQuery, tagIds }) => {
  const payload = {
    where: {
      OR: [
        { title: { contains: searchQuery } },
        { description: { contains: searchQuery } },
      ],
      // using the `in` operator like this
      tagId: { in: tagIds },
      userId: userIdFromSession,
    },
  }
  console.log('db.principle.findMany(payload)', payload)
  return db.principle.findMany(payload)
}

Это должно сработать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...