如何更新 Api-Platform 上 ArrayCollection 的条目?
How to update a entry from ArrayCollection on Api-Platform?
使用 Symfony 5,Api 平台和 Doctrine,我想更新 一个实体和他的数组集合链接。
当我向 Api 平台发送 PUT
请求时,主实体(UserMeasurement
#17)会更新 但子实体不会更新 (UserMeasurementMeasurement
#28) : 增加并创建了一个新条目。
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;
...
使用application/ld+json
时,您必须提供@id
property:
PUT request : /api/user_measurements/17
{
"date": "2020-10-20T12:11:22.609Z",
"measurements": [
{
"@id": "/api/user_measurement_measurements/28",
"value": "7"
}
]
}
使用 Symfony 5,Api 平台和 Doctrine,我想更新 一个实体和他的数组集合链接。
当我向 Api 平台发送 PUT
请求时,主实体(UserMeasurement
#17)会更新 但子实体不会更新 (UserMeasurementMeasurement
#28) : 增加并创建了一个新条目。
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;
...
使用application/ld+json
时,您必须提供@id
property:
PUT request : /api/user_measurements/17
{
"date": "2020-10-20T12:11:22.609Z",
"measurements": [
{
"@id": "/api/user_measurement_measurements/28",
"value": "7"
}
]
}