如何一次更新 OneToMany 关系中的多个对象?

How to update multiple objects off a OneToMany relationship at a time?

我正在使用 ApiPlatform

假设我有一个实体 User,在另一个名为 Experience 的实体上有一个 OneToMany,因此我的用户可以有多种体验。

体验已经加载到数据库中,每个用户有100个,只能精确持续时间。

我想知道一次更新 10 个体验的最佳方式是什么。

我在邮递员上试过类似的东西:

{
    "user": "/users/444217d0-84fa-4800-9c06-6f604f1be23f",
    "experiences": [
        {"@id": "/experiences/7c4f2f38-33cb-4e47-950e-0b5bea4014b4", "duration": 2},
        {"@id": "/experiences/975c09b3-2430-4120-9c9e-f5e37032a5f9", "duration": 2},
        {"@id": "/experiences/d2d8cbd8-e15e-4fc7-8238-55a915d69cd5", "duration": 3},
        {"@id": "/experiences/ec54b2b1-a009-4d47-b14d-b1720d948dd4", "duration": 4},
        {"@id": "/experiences/e734cd66-a328-43ae-9cd7-12bec7dd0615", "duration": 5},
        {"@id": "/experiences/b640ed04-4e43-4844-abd4-2c0453731712", "duration": 4},
        {"@id": "/experiences/1bc84609-c8a6-4b53-9245-bd1458cad716", "duration": 3},
        {"@id": "/experiences/fa426aa3-7792-440c-a5cf-05e2263ce2bc", "duration": 2},
        {"@id": "/experiences/072f4bb9-4b91-4063-a5c7-6d713322c8a4", "duration": 1},
        {"@id": "/experiences/f2e66837-99bb-4c34-9544-ac56c721345b", "duration": 1}
    ]
}

它有效,但删除了与该用户关联的其他 90 个体验。

有谁知道更新此集合中的 10 个对象而不删除其他 90 个对象的方法吗?

不幸的是,发送嵌套文档在 Api 平台中不是很成熟的功能。只要您相应地配置了 $user 的属性,它 更新 Experience 对象,但同时 PUT / PATCH (?) 操作实际上正在替换(不是将 $user->experiences 的值与您提供的数组合并 - 这就是您失去其他关系的原因。

虽然您可以通过不同的方式实现您想要的。你可以

在任何情况下,您都必须手动注意将现有的 $user->experiences 与您的 PUT / PATCH 请求提供的合并。

编辑:哦,当然还有另一种方法,可能是api平台“推荐”的方法:只需为每个[发送PUT / PATCH请求=10=]资源。