2013-05-27 242 views
3

您好我想創建這樣的映射映射和樹枝模板

class Users 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id_users", type="smallint", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=100, nullable=true) 
    */ 
    private $name; 
    /** 
    * 
    * @var ArrayCollection 
    * @ORM\OneToMany(targetEntity="UsersEmailAddresses", mappedBy="users") 
    * @ORM\JoinColumn(name="id_users", referencedColumnName="users_id") 
    */ 
    private $email; 

class UsersEmailAddresses 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id_users_email_adresses", type="smallint", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="email", type="string", length=100, nullable=true) 
    */ 
    private $email; 

    /** 
    * @var \Users 
    * @ORM\Column(name="users_id") 
    * @ORM\OneToMany(targetEntity="Users") 
    */ 
    private $users; 

,當我試圖用一個用戶顯示許多電子郵件喜歡

<td>{{ entity.name }}</td> 
<td><ul> 
{% for e in entity.email %} 
    <li>{{ e.email }}</li> 
{% endfor %} 
</ul></td> 
顯示

即時通訊錯誤An exception has been thrown during the rendering of a template ("Notice: Undefined index: users in /var/www/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line 1575") in /var/www/symfony/src/Test/UserBundle/Resources/views/Users/index.html.twig at line 22

22行是for循環

+0

更新了我的答案 - 任何不清楚或需要更多解釋?否則請接受:) – nifr

+0

接受:)謝謝 –

+0

不要忘記更新您的架構與教義:架構:更新--force – nifr

回答

1

這裏有一個映射錯誤。文檔:hereherehere

  • referencedColumname引用您的相關實體的ID字段。

  • 名稱是額外的列持有的外鍵是created-

  • referencedColumnName是相關實體的外鍵的名稱。

  • 定義多對一的擁有一對多的反側......

  • 不兩側使用一對多!

  • joinColumn定義必須在你自己的一方(也就是使用inversedBy的一方)。


IF你有用戶的多到一的關係......一個地址...... 你不 .. 的JoinColum將是對你的用戶實體(雙向關聯亦稱持有端)

* @ORM\JoinColumn(name="id_users", referencedColumnName="users_id") 
*/ 

...應該是...

* @ORM\JoinColumn(name="id_users", referencedColumnName="id_users_email_adresses") 
*/ 

可是......你的情況...

一個用戶必多不會忽略...地址將是您的雙向一個一對多關係的持有端。

用戶

一對多,的mappedBy

地址

多對一,inversedBy(+ JoinColumn)


提示:

可以完全ommit的@JoinColumn,因爲它會自動生成...

實體名稱通常應該是單一的... ...

爲什麼在你的數據庫中的這些複雜的ID列...不是它足夠有一個列用戶的列ID?

+0

我不知道爲什麼,我總是使用structur like'id' + _table_name –