复制具有可排序对象的关系的对象会引发重复条目错误

时间:2012-10-03 12:22:40

标签: symfony1 doctrine

在使用symfony 1.4的旧项目中有一个对象Product链接到其他对象,例如Translation ProductPlatform ...

我想要做的是copy Product对象及其所有关系。

$product->copy(true) BUT

非常简单

它不会复制关系,所以我需要这样做:

  $this->loadReference('Translation');
  $this->loadReference('ProductPlatforms');

  foreach ($this->ProductPlatforms as $platform) {
    $platform->loadReference('Translation');
  }

  $newProduct = $this->copy(true);
  $newProduct->save();

  return $newProduct;

抛出的错误是这样的:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-131' for key 'product_platform_position_sortable_idx'

我不明白的是以下要求:

SELECT p.id AS p__id, p.position AS p__position FROM product_platform p 
WHERE (p.product_id = 'EndNote (copie)') ORDER BY p.position desc LIMIT 1;
----
INSERT INTO product_platform (publish_configuration, product_id, platform_id, position) 
VALUES ('1', '131', '1', '1')

然后,它为另一个对象重新插入相同的位置:

INSERT INTO product_platform (publish_configuration, product_id, platform_id, position) 
VALUES ('1', '131', '3', '1');

为什么Where子句WHERE (p.product_id = 'EndNote (copie)')中的对象名称不是ID,而是ID。 我认为这是它尝试插入相同值的原因。

1 个答案:

答案 0 :(得分:0)

好的,这是Sortable行为的一个错误,我们发了一个PR:

https://github.com/bshaffer/csDoctrineActAsSortablePlugin/pull/25