2013-11-27 73 views
0

實體類是GeLdapGrupo和GeMedio。它們之間創建了多對多的關係。Symfony2 2.3.7 -Doctrine 2.4.1:ManyToMany關係不保存到數據庫

試過「,cascade = {」persist「}」而沒有。我修改了與多對多關係相關的添加和刪除元素方法。 Fixtures將數據放在ge_medio和ge_ldap_grupo表中,但不在ge_ldap_grupo表(這是多對多關係表)中。

第一類:

/** 
* GeMedio 
* 
* @ORM\Table(name="ge_medio") 
* @ORM\Entity 
*/ 
class GeMedio 
{ 

    //... 

    /** 
    * @ORM\ManyToMany(targetEntity="GeLdapGrupo", mappedBy="geMedios" 
     , cascade={"persist"}) 
    */ 
    private $geLdapGrupos; 

    //... 

    /** 
    * Add GeMedios 
    * 
    * @param GeMedio $geMedios 
    * @return GeLdapGrupo 
    */ 
    public function addGeMedio(GeMedio $geMedios, $cascade = true) 
    { 
     $this->GeMedios[] = $geMedios; 
     if ($cascade) { 
      $geMedios->addGeLdapGrupo($this, false); 
     } 
     return $this; 
    } 

    /** 
    * Remove GeMedios 
    * 
    * @param GeMedio $geMedios 
    */ 
    public function removeGeMedio(GeMedio $geMedios, $cascade = true) 
    { 
     $this->GeMedios->removeElement($geMedios); 
     if ($cascade) { 
      $geMedios->removeGeLdapGrupo($this, false); 
     } 
    } 
} 

第二類:

/** 
* GeLdapGrupo 
* 
* @ORM\Table(name="ge_ldap_grupo") 
* @ORM\Entity 
*/ 
class GeLdapGrupo 
{ 

    //... 

    /** 
    * @ORM\ManyToMany(targetEntity="GeMedio", inversedBy="geLdapGrupos" 
     , cascade={"persist"}) 
    * @ORM\JoinTable(name="ge_ldap_medio", 
    *  joinColumns={@ORM\JoinColumn(name="id_grupo_ldap", 
       referencedColumnName="id_grupo_ldap")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="id_medio", 
       referencedColumnName="id_medio")} 
    *  ) 
    */ 
    private $geMedios; 

    //... 

    /** 
    * Add GeMedios 
    * 
    * @param GeMedio $geMedios 
    * @return GeLdapGrupo 
    */ 
    public function addGeMedio(GeMedio $geMedios, $cascade = true) 
    { 
     $this->GeMedios[] = $geMedios; 
     if ($cascade) { 
      $geMedios->addGeLdapGrupo($this, false); 
     } 
     return $this; 
    } 

    /** 
    * Remove GeMedios 
    * 
    * @param GeMedio $geMedios 
    */ 
    public function removeGeMedio(GeMedio $geMedios, $cascade = true) 
    { 
     $this->GeMedios->removeElement($geMedios); 
     if ($cascade) { 
      $geMedios->removeGeLdapGrupo($this, false); 
     } 
    } 

    //... 

} 

的更新的代碼是一樣的東西:

//insert some data in table 1, save element on an array gemedios. 
// Doing $manager->persist($entity); 

//insert some data in table 2, save element on an array geldapgrupos. 
// Doing $manager->persist($entity); 

foreach ($relations as $relation) 
    print_r($relation); 
    $gemedio = $gemedios[$relation['id_gemedio']]; 
    $geldapgrupo = $geldapgrupos[$relation['id_geldapgrupo']]; 

    //Now we have all the related entities... 
    $gemedio->addGeLdapGrupo($grupo); 
    //$geldapgrupo->addGeMedio($medio); 
    print_r($medio); 
    print_r($grupo); 
    //$manager->persist($medio); 
    //$manager->persist($grupo); 
} 
$manager->flush(); 

隨着print_r的我檢查的輸出數據fixtures命令,它看起來很好(gegrupo有一個相關的geldapgrupo和geldapgrupo有相同的gegrupo)。

問題是,如前所述,表ge_ldap_grupo上沒有數據。

請任何人都可以幫我嗎?

非常感謝你。

+0

你仍然需要堅持eitherway – Flip

+0

感謝you.In的平均時間我已經把許多一對多到一個一對多多到一的關係,以「橋」實體。在未來,如果我有足夠的時間,精力和更多的信息,我會嘗試再次嘗試那些現在看起來有缺陷的多對多關係功能。 – LanderTaker

回答

相關問題