在集合形式外键始终为空

Posted

技术标签:

【中文标题】在集合形式外键始终为空【英文标题】:In collection form foreign key always null 【发布时间】:2017-08-05 17:44:05 【问题描述】:

我希望我的问题可以很清楚。 在我的 symfony2 项目中,我按照 this 教程制作了一个表单,我可以在其中按链接添加用户想要的任意数量的“作者”,所以我尝试使用表单集合来完成。 一切正常,除了总是获得“null”值而不是“id”的多对一字段。 这是我所做的。

我有添加“作者”链接的 Soumission 实体

....
  /**
 * @ORM\OneToMany(targetEntity="tuto\BackofficeBundle\Entity\Auteur", 
  mappedBy="soumission", cascade="persist")
*/
protected $auteurs;
.....
/**
 * @param Collection $auteurs
 * @return $this
 */

public function setAuteurs(Collection $auteurs)

    $this->auteurs = $auteurs;
    return $this;


/**
 * Add auteur
 *
 * @param \tuto\BackofficeBundle\Entity\Auteur $auteur
 * @return Soumission
 */
 public function addAuteur(Auteur $auteur)
 
    if ( ! $this->auteurs->contains($auteur) ) 
        $auteur->setSoumission($this);   // this should set the "soumission-
                                            id" field 
        $this->auteurs->add($auteur);
    
    return $this->auteurs;
  
   public function removeAuteur(Auteur $auteur)
    
    if ($this->auteurs->contains($auteur)) 
        $this->auteurs->removeElement($auteur);
    
    return $this->auteurs;
    
   /**
 * @return mixed
 */
  public function getAuteurs()
  
    return $this->auteurs;
    

这是作者实体:

/**
 * @ORM\ManyToOne(targetEntity="Soumission", inversedBy="auteur")
 * @ORM\JoinColumn(name="soumission_id", referencedColumnName="id")
 */
 protected $Soumission;
 /**
 * @param $soumission
 * @return $this
 */
public function setSoumission(Soumission $soumission)

    $this->soumission = $soumission;
    return $this;
/**
 * @return mixed
 */
public function getSoumission()

    return $this->soumission;


public function __toString() 
    return $this->Soumission;

the result should be like the second line and not null value

【问题讨论】:

两个实体在同一个包中? 你在映射中有一些错误 是的,这两个实体在同一个包中 我不知道映射错误在哪里 inversedBy="auteurs" 而不是 inversedBy="auteur" ,soumission 而不是 Soumission .. 【参考方案1】:

尝试这样做:

  /**
   * @ORM\OneToMany(targetEntity="Auteur",mappedBy="soumission", cascade="persist")
   */
   protected $auteurs;
/**
 * Add auteurs
 * @return FormationMsk
 */
public function addAuteur(\tuto\BackofficeBundle\Entity\Auteur $auteurs)

    $this->auteurs[] = $auteurs;

    return $this;


/**
 * Remove auteurs
 */
public function removeAuteur(\tuto\BackofficeBundle\Entity\Auteur $auteurs)

    $this->auteurs->removeElement($auteurs);


/**
 * Get auteurs
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getAuteurs()

    return $this->auteurs;


 public function __construct()


    $this-auteurs = new \Doctrine\Common\Collections\ArrayCollection();

  

对于作者实体:

/**
 * @ORM\ManyToOne(targetEntity="Soumission", inversedBy="auteurs")
 * @ORM\JoinColumn(name="soumission_id", referencedColumnName="id")
 */
protected $soumission;

【讨论】:

以上是关于在集合形式外键始终为空的主要内容,如果未能解决你的问题,请参考以下文章

判断字符串为空为 null 为 whitespace 工具类

linux字符测试

自定义 UICollectionViewCell 中的 UILabel 始终为空,无法更新文本

HIbernate 无法删除具有外键的实体。外键设置为空

hibernate 一对多双向关联 外键值为空 怎么结决?

类 Observable 对象 @Published 变量始终为空