我在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的用例?
用于在早期创建嵌套子资源的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,而且我遇到的问题在这里可能不相关。