我正在尝试使用学说将几个项目持久化到数据库中,但只有最后一个项目被持久化。因此,我只将最后一行保留在数据库中,而不是所有数组项的行。我尝试了几种方法,但它们仍然只保留一个项目,第一个或最后一个。我究竟做错了什么。这是我的新代码。我编辑了一些东西并尝试了其他一些东西,但问题仍然存在。
foreach ($options as $option)
{
$pollOption = new PollOption();
$pollOption->setName($option);
$pollOption->setPoll($pollData);
$em->persist($pollOption);
$em->flush();
}
当我使用上面的 foreach 循环时,它只提交循环中的最后一个 pollOption 和数据库中的一个 pollData 项。
当我使用下面的 foreach 循环时,它会提交循环中的所有 pollOptions,但也会在每个循环中提交新的 pollData 行。因此,我最终拥有多行相同的 pollData,每行都与 foreach 中的单个选项相关联。
foreach ($options 作为 $option)
{
$pollOption = 新的 PollOption();
$pollOption->setName($option);
$pollOption->setPoll($pollData);
$em->persist($pollOption);
$em->flush();
$em->clear();
}
这是 PollOption 的其余代码和显示映射的 PollData pollData 类代码: class Poll
{
/**
- @ORM\OneToMany(targetEntity="PollOption", mappedBy="poll")
*/
受保护的$poll_options;
/**
* Add poll_options
*
* @param \Spidd\InformationBundle\Entity\PollOption $pollOptions
* @return Poll
*/
public function addPollOption(\Spidd\InformationBundle\Entity\PollOption $pollOptions)
{
$this->poll_options[] = $pollOptions;
return $this;
}
/**
* Remove poll_options
*
* @param \Spidd\InformationBundle\Entity\PollOption $pollOptions
*/
public function removePollOption(\Spidd\InformationBundle\Entity\PollOption $pollOptions)
{
$this->poll_options->removeElement($pollOptions);
}
/**
* Get poll_options
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getPollOptions()
{
return $this->poll_options;
}
}
轮询选项类:
类 PollOption
{
/**
* @ORM\ManyToOne(targetEntity="Poll", inversedBy="poll_options", cascade={"all"})
* @ORM\JoinColumn(name="poll_id", referencedColumnName="id")
*/
protected $poll;
/**
* Set poll
*
* @param \Spidd\InformationBundle\Entity\Poll $poll
* @return PollOption
*/
public function setPoll(\Spidd\InformationBundle\Entity\Poll $poll = null)
{
$this->poll = $poll;
return $this;
}
/**
* Get poll
*
* @return \Spidd\InformationBundle\Entity\Poll
*/
public function getPoll()
{
return $this->poll;
}
}
以上是我的新代码。我想坚持几个 pollOptions 映射到一个 pollData 对象。我究竟做错了什么?