我有一个User实体,可以使用GooglePeopleApi从Google添加他/她的联系人。
API按原样提供了与前端的联系人数组(Nextjs)。问题是如何将所有这些联系人插入单个突变中。
我当然可以让前端循环遍历数组,然后逐个发布联系人,但这有点愚蠢。
应该可以使用Contact输入创建一个类型数组,然后使用它来设置customArgsMutation
。 (我从Hasura看到了一些例子)。
明智的做法,现在看起来像这样(仅相关代码):
User.php
....
/**
* @ORM\OneToMany(targetEntity="App\Entity\Contact", mappedBy="user")
* @Groups({"put-contacts", "get-admin", "get-owner"})
*/
private $contacts;
Contact.php
/**
* @ApiResource(
* attributes={"pagination_enabled"=false},
* graphql={
* "item_query"={
* "normalization_context"={"groups"={"get-admin", "get-owner"}},
* },
* "collection_query"={
* "normalization_context"={"groups"={"get-admin", "get-owner"}},
* },
* "delete"={"security"="is_granted('IS_AUTHENTICATED_FULLY') and object.getUser() == user"},
* "create"={
* "security"="is_granted('IS_AUTHENTICATED_FULLY')",
* "denormalization_context"={"groups"={"post", "put"}},
* "normalization_context"={"groups"={"get-owner", "get-admin"}},
* },
* }
* )
* @ORM\Entity(repositoryClass="App\Repository\ContactRepository")
*/
class Contact
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="contacts")
* @Groups({"post", "get-admin", "get-owner"})
*/
private $user;
/**
* @ORM\Column(type="string", length=180)
* @Groups({"post", "put", "get-admin", "get-owner"})
*/
private $email;
/**
* @ORM\Column(type="string", length=180, nullable=true)
* @Groups({"post", "put", "get-admin", "get-owner"})
*/
private $familyName;
/**
* @ORM\Column(type="string", length=180, nullable=true)
* @Groups({"post", "put", "get-admin", "get-owner"})
*/
private $givenName;
/**
* @ORM\Column(type="string", length=180, nullable=true)
* @Groups({"post", "put", "get-admin", "get-owner"})
*/
private $displayName;
在graphiql
中,createContact
输入看起来像这样:
user: String
email: String!
familyName: String
givenName: String
displayName: String
clientMutationId: String
答案 0 :(得分:0)
这里有几个选项,具体取决于您想要的并发量:
客户端可以使用多个突变作为别名发出单个 HTTP 请求:
mutation CreateUsers {
user1: createUser({ //userInput1 }) { ...userFields }
user2: createUser({ //userInput2 }) { ...userFields }
user3: createUser({ //userInput3 }) { ...userFields }
}
fragment userFields on CreateUserPayload {
firstName
// etc
}
响应将如下所示:
{
"data": {
"user1": {...},
"user2": {...},
"user3": {...},
}
}
优点:
缺点:
创建一个允许您创建多个用户的“批量突变”是一种常见的做法(我猜这很常见)。
mutation CreateUsers {
createUsers([
{ //userInput1 },
{ //userInput2 },
{ //userInput3 }
]) {
firstName
// etc
}
}
优点:
缺点: