【问题标题】:How to update a entry from ArrayCollection on Api-Platform?如何从 Api-Platform 上的 ArrayCollection 更新条目?
【发布时间】:2020-10-20 12:34:46
【问题描述】:

使用 Symfony 5、Api Platform 和 Doctrine,我想更新一个实体和他的数组集合链接。

当我向 Api 平台发送 PUT 请求时,主实体 (UserMeasurement #17) 被更新并创建。

PUT request : ​/api​/user_measurements​/17
{
    "date": "2020-10-20T12:11:22.609Z",
    "measurements": [
        {
            "id": "/api/user_measurement_measurements/28", // same result with "28" value
            "value": "7"
        }
    ]
}

(在创建 POST 数据时一切正常(创建主实体和子实体)

主体部分:

 * @ApiResource(
 *     collectionOperations={"get", "post"},
 *     itemOperations={"get", "put", "delete"},
 *     normalizationContext={
 *         "groups"={"user_measurements_read"}
 *     },
 *     denormalizationContext={
 *         "groups"={"user_measurements_write"}
 *     },
 * )
class UserMeasurement
{
    ...
    /**
     * @var UserMeasurementMeasurement[]|ArrayCollection
     *
     * @ORM\OneToMany(
     *     targetEntity="App\Entity\UserMeasurementMeasurement",
     *     mappedBy="userMeasurement",
     *     cascade={"persist"},
     * )
     * @Groups({
     *     "user_measurements_read",
     *     "user_measurements_write",
     * })
     */
    private $measurements;
    ...

子实体的一部分:

 * @ApiResource(
 *     collectionOperations={"get", "post"},
 *     itemOperations={"get", "put", "delete"},
 *     normalizationContext={
 *         "skip_null_values"=false,
 *         "groups"={"user_measurement_measurements_read"}
 *     },
 * )
class UserMeasurementMeasurement
{
    ...
    /**
     * @var float
     *
     * @ORM\Column(type="decimal", nullable=true, precision=6, scale=2)
     * @Assert\Positive()
     * @Groups({
     *     "user_measurements_read",
     *     "user_measurements_write",
     * })
     */
    private $value;
    ...

【问题讨论】:

  • 子实体的@ApiResource 是什么?您的 AcceptContent-type 标头是什么?
  • 感谢您的回复。我更新了我的问题和子实体。 AcceptContent-Type 是“应用程序/ld+json”

标签: symfony api-platform.com


【解决方案1】:

使用application/ld+json时,必须提供@idproperty

PUT request : ​/api​/user_measurements​/17
{
    "date": "2020-10-20T12:11:22.609Z",
    "measurements": [
        {
            "@id": "/api/user_measurement_measurements/28",
            "value": "7"
        }
    ]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多