#symfony #api-platform.com
#symfony #api-platform.com
Вопрос:
С помощью Symfony 5, платформы Api и Doctrine я хочу обновить объект и его связанную коллекцию массивов.
Когда я отправляю PUT
запрос на платформу Api, обновляется основная сущность ( 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
*
* @ORMOneToMany(
* targetEntity="AppEntityUserMeasurementMeasurement",
* 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
*
* @ORMColumn(type="decimal", nullable=true, precision=6, scale=2)
* @AssertPositive()
* @Groups({
* "user_measurements_read",
* "user_measurements_write",
* })
*/
private $value;
...
Комментарии:
1. Что такое
@ApiResource
дочерняя сущность? Каковы вашиAccept
Content-type
заголовки and ?2. Спасибо за ваш ответ. Я обновил свой вопрос и дочернюю сущность.
Accept
иContent-Type
это «application / ld json»
Ответ №1:
При использовании application/ld json
вы должны предоставить @id
свойство:
PUT request : /api/user_measurements/17
{
"date": "2020-10-20T12:11:22.609Z",
"measurements": [
{
"@id": "/api/user_measurement_measurements/28",
"value": "7"
}
]
}