如何在GraphQL中进行相关突变?

时间:2018-03-24 20:59:35

标签: javascript node.js laravel api express

我们如何在GraphQL中实现相关的突变?

我决定为自己创建一个投资组合来学习GraphQL,并学习一个新工具。直到我需要在我的投资组合中添加一个条目并附加图像时,我没有遇到任何困难。

当您向投资组合添加条目时,它具有表示为附加图像的相关实体。他们有标题,描述和多个标签。与投资组合记录本身一样,图像位于不同的表格中,并通过投资组合记录的ID进行链接。

以下是问题出现的地方:如何在一个突变中添加带有其他图像的条目并将其链接起来,以及如何正确地进行操作?

我搜索了论坛并清除了我没找到的手册。关于如何做到这一点,我有几个想法:使用订阅或通过Promise执行突变。我想第一种方法是正确的,但仍有疑问。提示如何正确处理此类突变。谢谢你的聆听。

在开发中,我使用GraphQL,Apollo,Vue和Laravel。

表格结构:

CREATE TABLE IF NOT EXISTS `portfolio_works` (
  `id` int(10) unsigned NOT NULL,
  `portfolio_id` int(10) unsigned NOT NULL,
  `title` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `image` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `description` text COLLATE utf8mb4_unicode_ci,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `portfolio_work_images` (
  `id` int(10) unsigned NOT NULL,
  `portfolio_id` int(10) unsigned NOT NULL,
  `portfolio_work_id` int(10) unsigned NOT NULL,
  `image` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `title` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

1 个答案:

答案 0 :(得分:2)

我认为你是在推翻事情。这是一种方法:

type Portfolio {
    id: ID!
    portfolioImages: [PortfolioImages]
    title: String
    image: String
    description: String
}

type PortfolioImages {
    id: ID!
    portfolio: Portfolio
    image: String
    title: String
}

input PortfolioInput {
    id: ID!
    title: String!
    image: String!
    description: String
}

input PortfolioImagesInput {
    image: String
    title: String
}

extend type RootMutation {
    # Creates a new portfolio
    createPortfolio(item: PortfolioInput!, images: PortfolioImagesInput): Portfolio
}

然后在映射到createPortfolio变异的函数内部,您将创建一个MySQL事务,为您的关系创建必要的数据行,然后COMMIT transaction。进行交易的示例:https://github.com/mysqljs/mysql#transactions