我试图在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"
]
}
这样做是不灵活的,更合理的做法应该是重新发送所有需要的集合。
不管怎么说,如果你想要这样的东西,我建议使用一个Listener(预更新?),以获得正确的并添加新的元素。