【问题标题】:How to make related mutations in GraphQL?如何在 GraphQL 中进行相关突变?
【发布时间】:2018-09-03 07:48:03
【问题描述】:

我们如何在 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;

【问题讨论】:

    标签: javascript node.js laravel api express


    【解决方案1】:

    我觉得你想多了。这是一种方法:

    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

    【讨论】:

      猜你喜欢
      • 2021-12-02
      • 2022-11-25
      • 2016-05-30
      • 2019-02-21
      • 2021-02-17
      • 2017-06-07
      • 1970-01-01
      • 2018-07-04
      • 2018-08-03
      相关资源
      最近更新 更多