Entity framework Symfony2层叠更新

Entity framework Symfony2层叠更新,entity-framework,symfony,doctrine-orm,Entity Framework,Symfony,Doctrine Orm,我将Symfony2.7与条令一起使用,在更新实体id后出现问题,问题如下: An exception occurred while executing 'UPDATE Vmrs SET id = ? WHERE id = ?' with params [14, 8]: SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constrai

我将Symfony2.7与条令一起使用,在更新实体id后出现问题,问题如下:

An exception occurred while executing 'UPDATE Vmrs SET id = ? WHERE id = ?' with params [14, 8]:
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`stageocp`.`vmr_reservation`, CONSTRAINT `FK_755A06C0552D88B6` FOREIGN KEY (`vmr_id`) REFERENCES `vmrs` (`id`))
我对删除操作没有问题,它使用外键删除实体中的字段和实体中的所有字段,我希望在更新时也这样做

当具有外键的实体没有共享我更新的同一实体的字段时,它会工作

这是我的密码:

包含外键的实体:

/**
* VmrReservation
*
* @ORM\Table()
*@ORM\Entity(repositoryClass="StageOCP\ProjectBundle\Repository\VmrReservationRepository")
*/
class VmrReservation {
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\OneToMany(targetEntity="StageOCP\ProjectBundle\Entity\Guest", mappedBy="vmrreservation", cascade={"persist","remove"})
 */
private $guests;

/**
 * @ORM\ManyToOne(targetEntity="StageOCP\UserBundle\Entity\User", inversedBy="vmrreservations")
 * @ORM\JoinColumn(nullable=true)
 */
private $user;

/**
 * @ORM\ManyToOne(targetEntity="StageOCP\ProjectBundle\Entity\Reservation", inversedBy="vmrreservations")
 * @ORM\JoinColumn(nullable=false)
 */
private $reservation;

/**
 * @ORM\ManyToOne(targetEntity="StageOCP\ProjectBundle\Entity\Vmr", inversedBy="vmrreservations", cascade={"persist","remove"})
 * @ORM\JoinColumn(nullable=false)
 */
private $vmr;

/**
 * @var boolean
 *
 * @ORM\Column(name="isReserved", type="boolean")
 */
private $isReserved;


/**
 * Get id
 *
 * @return integer
 */
public function getId() {
    return $this->id;
}
包含主键的实体,即我更新的实体:

/**
* Vmrs
*
* @ORM\Table(name="Vmrs")
* @ORM\Entity(repositoryClass="StageOCP\ProjectBundle\Repository\VmrsRepository")
*/
class Vmr
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\OneToMany(targetEntity="StageOCP\ProjectBundle\Entity\VmrReservation", mappedBy="vmr", cascade={"persist","remove"})
 */
private $vmrreservations;

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


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

/**
 * Set id
 *
 * @param int $id
 * @return Vmrs
 */
public function setId($id)
{
    $this->id = $id;

    return $this;
}
这是我的控制器:

/**
 * Displays a form to edit an existing Vmr entity.
 *
 */
public function editAction($id) {
    $em = $this->getDoctrine()->getManager();

    $entity = $em->getRepository('StageOCPProjectBundle:Vmr')->find($id);

    if (!$entity) {
        throw $this->createNotFoundException('Unable to find Vmr entity.');
    }

    $editForm = $this->createEditForm($entity);
    $deleteForm = $this->createDeleteForm($id);

    return $this->render('StageOCPProjectBundle:Vmr:edit.html.twig', array(
        'entity' => $entity,
        'edit_form' => $editForm->createView(),
        'delete_form' => $deleteForm->createView(),
    ));
}
public function updateAction(Request $request, $id) {
    $em = $this->getDoctrine()->getManager();

    $entity = $em->getRepository('StageOCPProjectBundle:Vmr')->find($id);

    if (!$entity) {
        throw $this->createNotFoundException('Unable to find Vmr entity.');
    }

    $deleteForm = $this->createDeleteForm($id);
    $editForm = $this->createEditForm($entity);
    $editForm->handleRequest($request);

    if ($editForm->isValid()) {
        $metadata = $em->getClassMetaData(get_class($entity));
        $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
        $em->flush();

        return $this->redirect($this->generateUrl('admin_vmr'));
    }

    return $this->render('StageOCPProjectBundle:Vmr:edit.html.twig', array(
        'entity' => $entity,
        'edit_form' => $editForm->createView(),
        'delete_form' => $deleteForm->createView(),
    ));
}
当我更新实体vmr中的主键id时,我想更新实体vmr中的外键


我希望我能在这里找到一个解决方案,谢谢你

只是一个问题:为什么要更改主键?条令2不支持键的级联更新。这不是标准的sql行为。您可以尝试将更新级联直接添加到mysql关系中。但正如东卡利斯托所暗示的:为什么要做这样的事?这只是自找麻烦。谢谢你的回答:更改主键不是我的逻辑,我目前正在实习,负责我的人让我这么做,