Doctrine orm 更新条令汇编
我正在做一个调查项目,我得到了3个实体,SurveYumFlage,surveyQuestionumfrageFrage和surveyAnswerumfrageAntwort。 以下是删除所有不必要字段的实体:Doctrine orm 更新条令汇编,doctrine-orm,doctrine,zend-framework2,Doctrine Orm,Doctrine,Zend Framework2,我正在做一个调查项目,我得到了3个实体,SurveYumFlage,surveyQuestionumfrageFrage和surveyAnswerumfrageAntwort。 以下是删除所有不必要字段的实体: namespace Umfrage\Entity; use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Coll
namespace Umfrage\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
/**
* Umfrage
*
* @ORM\Table(name="umfrage")
* @ORM\Entity
*/
class Umfrage
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var Fragen
*
* @ORM\OneToMany(targetEntity="Umfrage\Entity\UmfrageFrage", mappedBy="umfrage", cascade={"persist","remove"})
*/
private $fragen;
public function __construct() {
$this->fragen = new ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set fragen
*
* @param \Umfrage\Entity\UmfrageFrage $fragen
*
* @return UmfrageFrage
*/
public function setFragen($fragen)
{
$this->fragen = $fragen;
return $this;
}
/** Get fragen
*
* @param \Umfrage\Entity\UmfrageFrage $fragen
*
* @return UmfrageFrage
*/
public function getFragen() {
return $this->fragen;
}
public function addFragen(Collection $fragen)
{
foreach ($fragen as $frage) {
$frage->setUmfrage($this);
$this->fragen->add($frage);
}
}
public function removeFragen(Collection $fragen)
{
foreach ($fragen as $frage) {
$frage->setUmfrage(null);
$this->fragen->removeElement($frage);
}
}
}
问题是:
namespace Umfrage\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
/**
* UmfrageFrage
*
* @ORM\Table(name="umfrage_frage")
* @ORM\Entity
*/
class UmfrageFrage
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \Umfrage\Entity\Umfrage
*
* @ORM\ManyToOne(targetEntity="Umfrage\Entity\Umfrage", inversedBy="fragen")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="umfrage_id", referencedColumnName="id")
* })
*/
private $umfrage;
/**
* @var Antworten
*
* @ORM\OneToMany(targetEntity="Umfrage\Entity\UmfrageAntwort", mappedBy="umfrageFrage", cascade={"all"})
*/
private $antworten;
public function __construct() {
$this->antworten = new ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set umfrage
*
* @param \Umfrage\Entity\Umfrage $umfrage
*
* @return UmfrageFrage
*/
public function setUmfrage(\Umfrage\Entity\Umfrage $umfrage = null)
{
$this->umfrage = $umfrage;
return $this;
}
/**
* Get umfrage
*
* @return \Umfrage\Entity\Umfrage
*/
public function getUmfrage()
{
return $this->umfrage;
}
/**
* Set antworten
*
* @param \Umfrage\Entity\UmfrageAntwort $antworten
*
* @return UmfrageAntwort
*/
public function setAntworten($antworten)
{
$this->antworten = $antworten;
return $this;
}
/** Get antworten
*
* @param \Umfrage\Entity\UmfrageAntwort $antworten
*
* @return UmfrageAntwort
*/
public function getAntworten() {
return $this->antworten;
}
public function addAntworten(Collection $antworten)
{
foreach ($antworten as $antwort) {
$antwort->setUmfrageFrage($this);
$this->antworten->add($antwort);
}
}
public function removeAntworten(Collection $antworten)
{
foreach ($antworten as $antwort) {
$this->antworten->removeElement($antwort);
}
}
}
答案是:
namespace Umfrage\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
/**
* UmfrageAntwort
*
* @ORM\Table(name="umfrage_antwort")
* @ORM\Entity
*/
class UmfrageAntwort
{
/**
* @var integer
*
* @ORM\Column(name="id", type="bigint", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \Umfrage\Entity\UmfrageFrage
*
* @ORM\ManyToOne(targetEntity="Umfrage\Entity\UmfrageFrage", inversedBy="antworten")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="umfrage_frage_id", referencedColumnName="id")
* })
*/
private $umfrageFrage;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set umfrageFrage
*
* @param \Umfrage\Entity\UmfrageFrage $umfrageFrage
*
* @return UmfrageFrage
*/
public function setUmfrageFrage($umfrageFrage)
{
$this->umfrageFrage = $umfrageFrage;
return $this;
}
/**
* Get umfrageFrage
*
* @return \Umfrage\Entity\UmfrageFrage
*/
public function getUmfrageFrage()
{
return $this->umfrageFrage;
}
}
控制器操作:
public function editAction()
{
$id = (int) $this->params()->fromRoute('id', 0);
if (!$id) {
return $this->redirect()->toRoute('umfrage', array('action'=>'add'));
}
$umfrage = $this->getEntityManager()->find('Umfrage\Entity\Umfrage', $id);
$form = new UmfrageForm($this->getEntityManager());
$form->setHydrator(new DoctrineEntity($this->getEntityManager(),'Umfrage\Entity\Umfrage'));
$form->bind($umfrage);
$request = $this->getRequest();
if ($request->isPost()) {
$form->setData($request->getPost());
if ($form->isValid()) {
$this->getEntityManager()->persist($umfrage);
$this->getEntityManager()->flush();
// Redirect to overview
return $this->redirect()->toRoute('umfrage');
}
}
$this->layout('layout/umfrage_backend');
return new ViewModel(array(
'id' => $id,
'form' => $form
));
}
以及以下观点:
<?php
// module/Umfrage/view/umfrage/umfrage/edit.phtml:
use Doctrine\Common\Util\Debug;
$title = 'Umfrage bearbeiten';
$this->headTitle($title);
?>
<h1><?php echo $this->escapeHtml($title); ?></h1>
<?php
$form = $this->form;
$form->setAttribute('action', $this->url(
'umfrage',
array(
'action' => 'edit',
'id' => $this->id,
)
));
echo $this->ztbForm($form);
?>
添加调查工作正常,同时删除,调查及其相关问题/答案将从数据库中删除。只有更新操作未按预期工作。调查和问题会更新,但对于答案,我会收到一个插入,而不是更新,这会导致数据库中出现重复条目。映射代码有什么问题
提前感谢您的帮助 也发布您的视图文件好的,我添加了视图文件,让我知道,如果需要任何其他代码,好的,我认为您在这里有问题$id=int$this->params->fromRoute'id',0;如果$id{return$this->redirect->toRoute'umfrage',array'action'=>'add';}发生的情况是,当您发布数据时,您通过某种方式无法将id传递给编辑操作,请尝试执行类似这样的操作$id=int$this->params->fromRoute'id',0;如果$id{$id=$request->getPost'id';//这不是一个优化的解决方案,但我认为它现在可以工作,你可以很容易地修改它来解决你的问题。}id是可以的,正如我写的,调查和问题都会更新,只有第三部分没有答案。到目前为止,我已经成功地实现了这一点,但在DB中,答案仍然没有更新。旧的设置为空,而编辑的仍被插入。还有什么想法吗?当我假设你设法来编辑动作时,我认为你是如何被重定向到添加动作的,所以,看看你的观点,这很好,你的路线也很好,这里唯一值得怀疑的是,你被重定向到从编辑动作添加