@guyasyou

Как поменять порядок сохранения данных OneToMany в Doctrine (UPDATE перед INSERT)?

Есть товар, а у него комбинации связанные по 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 сначала обновить старые записи и обнулить уникальные ключи, а только потом вставлять новые?

Или придется вручную сохранят текущие записи перед сохранением товара?
  • Вопрос задан
  • 163 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы