Есть товар, а у него комбинации связанные по OneToMany. У комбинаций есть опции в виде JSON
{"205":300,"206":307,"207":0}
и он уникален, и в БД столбец отмечен как уникальный ключ.
Проблема возникает при сохранении товара. Doctrine первым делом вставляет новые записи, и ожидаемо получает ошибку
1062 Duplicate entry '{"205":300,"206":307,"207":0}
Вот код добавления новых комбинаций.
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="ProductCombination", mappedBy="product", cascade={"persist", "refresh"})
*/
protected $productCombinations;
public function updateProductCombinations($newCombinations) {
foreach ($this->productCombinations as $currentCombination) {
//Обнуляем опции и деактивируем
$currentCombination->setOptionsJSON(NULL);
$currentCombination->unapprove();
}
foreach ($newCombinations as $newCombination) {
$price = null;
$this->productCombinations->add($newCombination);
}
}
Как заставить Doctrin сначала обновить старые записи и обнулить уникальные ключи, а только потом вставлять новые?
Или придется вручную сохранят текущие записи перед сохранением товара?