Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用foreach循环持久化数组_Php_Doctrine Orm - Fatal编程技术网

Php 使用foreach循环持久化数组

Php 使用foreach循环持久化数组,php,doctrine-orm,Php,Doctrine Orm,我试图使用条令将几个项目持久化到数据库中,但只有最后一个项目被持久化。因此,我只获取数据库中持久化的最后一行,而不是所有数组项的行。我尝试了几种方法,但它们仍然只坚持一项,第一项或最后一项。我做错了什么。这是我的新代码。我编辑了一些内容并尝试了一些其他内容,但问题仍然存在 foreach ($options as $option) { $pollOption = new PollOption(); $pollOption->setName($option);

我试图使用条令将几个项目持久化到数据库中,但只有最后一个项目被持久化。因此,我只获取数据库中持久化的最后一行,而不是所有数组项的行。我尝试了几种方法,但它们仍然只坚持一项,第一项或最后一项。我做错了什么。这是我的新代码。我编辑了一些内容并尝试了一些其他内容,但问题仍然存在

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($poll选项)

$em->flush()

$em->clear()

}

下面是PollOption和PollData的其余代码 显示映射的pollData类代码: 班级投票

{

/**

  • @ORM\OneToMany(targetEntity=“PollOption”,mappedBy=“poll”)
*/

受保护的$poll_选项

/**

 * 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;
}
}

选项类别:

类轮询选项

{

}


以上是我的新代码。我希望将多个pollOptions映射到单个pollData对象。我做错了什么?

为什么每次循环迭代时都要坚持它们?它还可能在特定时间导致内存溢出。您可能希望将它们添加到特定数量的项的批中,然后将该批持久化到数据库中。免责声明:我熟悉JPA/Hibernate,但我从未使用过doctrine。不确定它是否有效,但如何在每个循环上将$polloption设置为null?没有dotrine经验,但pollData不应该位于polloption对象内。可能是第二个persist调用出错。我已尝试使用级联方式从pollOption对象持久化pollData,但问题没有出现。主要的问题是,它在循环时只提交一个pollOption项,最后一个,所以它就像覆盖在它之前保存的任何项一样,因此我在数据库中只有一行,而不是每个循环的所有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;
}