API 平台 - 添加具有子资源的新实体

API Platform - Adding new entity with subresource

据我所知,这是不可能的,但我想我会问一下,以防我遗漏了什么。

我有 2 个实体,规则和条件

一个规则可以有多个条件

我想要实现的是在单个请求中添加一个具有一个或多个条件的新规则

我已经通过 POST

尝试了以下方法
{
  "property": "id",
  "conditions": [
    {
        "position": 1
    }
  ],
  "title": "getId",
  "position": 1
}

条件有一个 rule_id 列,但显然我现在不能设置它,因为它还没有创建

那个请求给我错误

Nested documents for attribute "conditions" are not allowed. Use IRIs instead.

当然,我不能使用 IRI,因为我还没有创建条件,而且我不能先创建条件,因为它会导致外键检查失败

所以我认为这是不可能的,还是我只是做错了?

提前致谢

您需要向 RuleCondition 类 添加相同的序列化组,如 here 所述。

您还必须将 cascade={"persist"} 属性添加到 Rule::conditions 属性 的 @OneToMany 注释中。

类似的东西:

// src/EntityRule.php

#[ORM\Entity(repositoryClass: RuleRepository::class)]
#[ApiResource(
    collectionOperations: [
        "post" => [
            "denormalization_context" => [ "groups" => ["write:rule"]]
        ]
    ]
)]
class Rule
{
    // ...
    
    #[ORM\OneToMany(mappedBy: "rule", targetEntity: Condition::class, cascade: ["persist"])]
    #[Groups(["write:rule"])]
    /**
     * @var Condition[]
     */
    private Collection $conditions;

    // ...
}
// src/Entity/Condition.php

#[ORM\Entity(repositoryClass: ConditionRepository::class)]
#[ApiResource(
    collectionOperations: [
        "post" => [
            "denormalization_context" => ["groups" => ["write:condition"]
            ]
        ]
    ]
)]
class Condition
{
    // ...

    #[ORM\Column(nullable=false, unique=false)]
    #[Groups(["write:condition", "write:rule"])]
    private int $position;

    // ...
}