symfony - 如何从 Api-Platform 上的 ArrayCollection 更新条目?
问题描述
使用 Symfony 5、Api Platform 和 Doctrine,我想更新一个实体和他的数组集合链接。
当我向PUT
Api Platform 发送请求时,主实体(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
属性:
PUT request : /api/user_measurements/17
{
"date": "2020-10-20T12:11:22.609Z",
"measurements": [
{
"@id": "/api/user_measurement_measurements/28",
"value": "7"
}
]
}
推荐阅读
- reactjs - React 测试库:检查属性是否匹配正则表达式
- python - 使用基于 ctypes 的扩展安装 python 包的问题
- git - git push 有效,但不是 git push origin master
- tensorflow - Keras Tuner 从超参数搜索中返回验证损失
- mozilla - 远程计算机的 mozilla.cfg 设置
- javascript - t梳反应原生表单选择器无法显示选择的值
- python - Fabric echo 命令输出错误
- elasticsearch - Elasticsearch 包括每个嵌套对象的 geo_distance 并按 [0] element.distance 排序
- javascript - 如何在 chrome 扩展程序中以编程方式转到 youtube 视频中的特定时间?
- amazon-web-services - 将 S3 文件下载到 Elasticbeanstalk 应用程序目录不起作用