API平台:在不覆盖现有元素的情况下添加元素到关系中。

问题描述 投票:0回答:1

我试图在PATCH方法中添加一个元素到一个集合中而不覆盖现有的元素。现在,元素被正确地添加,但现有的元素被删除。有什么好办法吗?

第一个实体(Office):

....

/**
 * @var Service[]
 *
 * @Groups({Office::LIST, Office::DETAIL})
 *
 * @ORM\ManyToMany(targetEntity="App\Entity\Service", mappedBy="offices", cascade={"persist"})
 */
private $services;

....

/**
 * @param Service $service
 */
public function addService(Service $service): void
{
    if (!$this->services->contains($service)) {
        $this->services[] = $service;
        $service->addOffice($this);
    }
}

第二个实体(服务)。

....

/**
 * @var Office|null
 *
 * @Groups({Service::LIST, Service::DETAIL})
 *
 * @ORM\ManyToMany(targetEntity="App\Entity\Office", inversedBy="services")
 */
private $offices;

....

/**
 * @param Office $office
 */
public function addOffice(Office $office): void
{
    if (!$this->offices->contains($office)) {
        $this->offices[] = $office;
    }
}

我的patch请求的主体是office资源。

{
    "services": [
        "/api/services/9"
    ]
}
symfony doctrine-orm api-platform.com
1个回答
1
投票

这样做是不灵活的,更合理的做法应该是重新发送所有需要的集合。

不管怎么说,如果你想要这样的东西,我建议使用一个Listener(预更新?),以获得正确的并添加新的元素。

© www.soinside.com 2019 - 2024. All rights reserved.