нарушение ограничения целостности 1062 с ORM и Symfony2

У меня есть сущность с первичным ключом, как это:

 /**
* @var integer
*
* @ORM\Column(name="product_id", type="integer", nullable=false)
* @ORM\Id
*/
protected $productId;

....

/**
* Set productId
*
* @param integer $productId
* @return Products
*/
public function setProductId($productId)
{
$this->productId = $productId;

return $this;
}

/**
* Get productId
*
* @return integer
*/
public function getProductId()
{
return $this->productId;
}

Но когда я пытаюсь вставить ProductId с помощью метода set, я получаю эту ошибку:

нарушение ограничения целостности 1062 повторяющаяся запись ‘0’ для ключа ‘primary’

Я пытался с * @ORM \ GeneratedValue (стратегии = «НЕТ»), но результат тот же, мне нужно установить идентификатор продукта, потому что последовательность не 1, 2, 3 … отличается.

И я не могу создать новый Id, потому что мой текущий ProductId используется другими объектами, такими как Foreing Keys.

Любое решение?
Заранее спасибо.

——Редактировать с файлом, где у меня есть ошибка ——

$prod = new Products();
$prod->setProductId("65");
$manager->persist($prod);
$manager->flush();

—-Редактировать со всей сущностью —-

пространство имен My \ WebBundle \ Entity;

используйте Doctrine \ ORM \ Mapping в качестве ORM;

class Products
{
/**
* @var integer
*
* @ORM\Column(name="product_id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*/
protected $productId;

/**
* @var string
*
* @ORM\Column(name="name", type="string", length=50, nullable=false)
*/
private $name;

/**
* @var integer
*
* @ORM\Column(name="version", type="integer", nullable=true)
*/
private $version;

/**
* @var string
*
* @ORM\Column(name="code", type="string", length=10, nullable=false)
*/
private $code;

/**
* @var integer
*
* @ORM\Column(name="price", type="integer", nullable=false)
*/
private $price;

/**
* Set productId
*
* @param integer $productId
* @return Products
*/
public function setProductId($productId)
{
$this->productId = $productId;

return $this;
}

/**
* Get productId
*
* @return integer
*/
public function getProductId()
{
return $this->productId;
}

/**
* Set name
*
* @param string $name
* @return Products
*/
public function setName($name)
{
$this->name = $name;

return $this;
}

/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}

/**
* Set version
*
* @param integer $version
* @return Products
*/
public function setVersion($version)
{
$this->version = $version;

return $this;
}

/**
* Get version
*
* @return integer
*/
public function getVersion()
{
return $this->version;
}

/**
* Set code
*
* @param string $code
* @return Products
*/
public function setCode($code)
{
$this->code = $code;

return $this;
}

/**
* Get code
*
* @return string
*/
public function getCode()
{
return $this->code;
}
/**
* Set price
*
* @param integer $price
* @return Products
*/
public function setPrice($price)
{
$this->price = $price;

return $this;
}

/**
* Get price
*
* @return integer
*/
public function getPrice()
{
return $this->price;
}

0

Решение

При использовании стратегии генерации идентификаторов не следует забывать, что вам нужно назначить пользовательский идентификатор до Вы вызываете метод EntityManager persist ().

Я думаю, что вы сохраняете новый объект до назначения пользовательского идентификатора, что означает, что ваше свойство $ productId установлено на ноль и будет приведено к 0 (нулю), если вы попытаетесь сбросить его. Это приведет к вашей ошибке.

Доктрина Док

1

Другие решения

Маркус отправит хороший ответ на вашу проблему. Вы можете решить эту проблему, добавив id в свою сущность и используя productId в качестве вторичного ключа.

Добавить идентификатор и установить его на Авто приращение, как

/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

Затем вы можете использовать ваш productId с:

 /**
* @var integer
*
* @ORM\Column(name="product_id", type="integer", nullable=false)
*/
protected $productId;

С этим решением вы будете использовать $ productId в качестве вторичного ключа. Не забудьте очистить данные в вашей таблице.

У вас также есть ошибка здесь:

$prod->setProductId(65);

Теперь вы пытаетесь установить данные, которые являются строкой — в вашей таблице есть целое число.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector