要在一个mutation中创建多个项,可以使用GraphQL的列表变量。以下是使用Api-Platform和GraphQL进行多项创建的代码示例:
CreateItemInput
的输入类型:input CreateItemInput {
name: String!
description: String!
// 其他属性...
}
[CreateItemInput]
用作参数类型。例如,添加一个名为createMultipleItems
的mutation字段:type Mutation {
createMultipleItems(items: [CreateItemInput!]!): [Item!]!
}
use App\Entity\Item;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class ItemController
{
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
/**
* @Route(path="/items/create-multiple", methods={"POST"})
*/
public function createMultiple(Request $request): array
{
$itemsData = json_decode($request->getContent(), true);
$createdItems = [];
foreach ($itemsData as $itemData) {
$item = new Item();
$item->setName($itemData['name']);
$item->setDescription($itemData['description']);
// 设置其他属性...
$this->entityManager->persist($item);
$createdItems[] = $item;
}
$this->entityManager->flush();
return $createdItems;
}
}
完成上述步骤后,你就可以使用如下的GraphQL查询来创建多个项:
mutation createMultipleItems($items: [CreateItemInput!]!) {
createMultipleItems(items: $items) {
id
name
description
# 其他属性...
}
}
并提供一个名为items
的变量,其值是一个包含多个项的数组。例如:
{
"items": [
{
"name": "Item 1",
"description": "Description 1"
},
{
"name": "Item 2",
"description": "Description 2"
}
]
}
这将在一个mutation中创建多个项,并返回创建的项的详细信息。