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循环

4

1 回答 1

1

你在这里有一个映射错误。文档:这里这里这里

  • referencedColumname 引用相关实体的 ID 字段。

  • name 是包含要创建的外键的额外列的名称-

  • referencedColumnName 是相关实体的外键。

  • 你定义 ManyToOne 在拥有OneToMany 在反面......

  • 不要在两边都使用 OneToMany

  • joinColumn 定义必须在您拥有的一方(也就是使用 inversedBy 的一方)。


如果你有一个多对一的用户关系......到一个地址......你没有...... JoinColum 将在你的用户实体上(也就是双向关联的拥有方)

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

.. 应该 ...

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

但是......在你的情况下......

一个用户应该有很多地址......地址将是您的双向一对多关系的拥有方。

用户

oneToMany , 映射

地址

ManyToOne, inversedBy (+ JoinColumn)


提示:

您可以完全省略@JoinColumn,因为它将自动生成...

实体名称通常应该是单数...

为什么你的数据库中有这些复杂的 id 列......拥有一个具有列 id 的表用户还不够吗?

于 2013-05-27T11:30:17.320 回答