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