使用API 平台使用一个GraphQl查询创建嵌套的文档对象

问题描述 投票:0回答:1

我在symfony应用程序中有一个基本实体:

/**
* @ApiResource()
* @ORM\Entity(repositoryClass=CardRepository::class)
*/
class Card
{
   /**
    * @ORM\Id()
    * @ORM\GeneratedValue()
    * @ORM\Column(type="integer")
    */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity=CardReference::class, mappedBy="card", orphanRemoval=true)
 */
    private $cardReferences;

    /**
    * @ORM\Column(type="string", length=255, nullable=true)
    */
   private $name;

您可以看到-还有另一个实体:CardReference,具有一对多关系。

所以现在-当我创建一个新的Card

mutation AddCard($name: String!) {
    createCard(input: { name: $name }) {
        card {
            name
        }
    }
}

我想知道也要创建CardReference的方法。因为这是每一次齐头并进。每个Card至少需要一个CardReference-因此应在创建卡时创建一个默认值。

之后使用另一个GraphQL查询的正确方法吗?还是这是编写custom resolver的用例?

symfony graphql doctrine apollo-client api-platform.com
1个回答
0
投票

用于在早期创建嵌套子资源的API平台,该案例已通过RFC规范标准化。

请参阅问题#3258有关更多信息。现在,您可以单独创建cardRefrence并将其IRI提供给Card资源,以使用标准资源访问模式来解决。

mutation AddCard($name: String!) {
    createCard(input: { 
        name: $name 
        cardReferences: [
            '/card_references/1',
            '/card_references/2'
            #... other IRI etc.
        ]
        }) {
        card {
            name
            #... Access CardReference Relay here which will return related IRI
        }
    }
}

注意:您可以使用自定义突变来实现此目的,但以我的观点和经验,使api平台不符合规范和标准总是会产生其他问题,您必须解决这些问题。尝试以这样一种方式创建模式,即它允许您足够灵活地将数据模型与基础数据库模式分开,通常最终会为定义的类型编写自己的持久性,dto,数据提供者和解析器。

将此注释作为盐粒,因为在某些情况下,api平台使易用性可以快速设置api,而且我遇到的问题在这里可能不相关。

© www.soinside.com 2019 - 2024. All rights reserved.