使用Doctrine在Symfony 4.1中保留OneToMany

问题描述 投票:1回答:4

我尝试使用OneToMany关联来保存我在实体中获得的数据。

使用FOS REST Bundle,我在控制器中获得实体。

public function add(Campaign $campaign)
{
    $em = $this->getDoctrine()->getManager();
    $em->persist($campaign);
    $em->flush();

我的实体是:

class Campaign
{
/**
 * @ORM\OneToMany(targetEntity="App\Entity\CampaignDates",
 *     mappedBy="campaign", cascade={"persist"})
 */
private $dates;

public function addDate(CampaignDates $date): self
{
    if (!$this->dates->contains($date)) {
        $this->dates[] = $date;
        $date->setCampaign($this);
    }

    return $this;
}

class CampaignDates
{
  /**
   * @ORM\ManyToOne(targetEntity="App\Entity\Campaign", 
  inversedBy="dates")
   */
  private $campaign;

public function getCampaign(): ?Campaign
{
    return $this->campaign;
}

public function setCampaign(?Campaign $campaign): self
{
    $this->campaign = $campaign;

    return $this;
}

在数据库中,与广告系列关联的campaign_dates表中的ID为空。

symfony doctrine-orm symfony4
4个回答
0
投票

试试这个命令:

php bin/console doctrine:schema:validate

OR

php bin/console d:s:v

0
投票

你尝试过:php bin / console doctrine:migrations:diff和php bin / console doctrine:migrations:migrate。当你这样做时,它创建自动addCampaign()和removeCampaign()


0
投票

我目前找到解决问题的唯一方法是我不认为很好的是再次创建相关实体。我的代码看起来像那样

    $dates = $campaign->getDates();
    if ($dates) {
        foreach ($dates as $date) {
            $dateObj = new CampaignDates();
            $dateObj->setDate($date->getDate())->setName($date->getName());
            $campaign->removeDate($date);
            $campaign->addDate($dateObj);
        }
    }
    $em = $this->getDoctrine()->getManager();
    $em->persist($campaign);
    $em->flush();

0
投票

我不确定,但它适用于symfony 2.6。将setCampaign更改为此

public function setCampaign(?Campaign $campaign): self {
    $this->campaign = $campaign;
    $campaign->addDate($date);
    return $this;
}

你可以检查一下。 Symfony Doctrine One to Many does not insert foreign key

© www.soinside.com 2019 - 2024. All rights reserved.