在树枝模板中映射和显示

时间:2013-05-27 11:19:11

标签: symfony doctrine-orm twig

您好我正在尝试创建此类映射

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

1 个答案:

答案 0 :(得分:1)

这里有映射错误。文档:hereherehere

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

  • name是保存要创建的外键的额外列的名称 -

  • referencedColumnName是相关实体的外键。

  • 你在拥有 OneToMany的方面定义了ManyToOne ......

  • 不要在双方使用OneToMany !!

  • joinColumn定义必须在您自己的方面(也就是使用inversedBy的那个)。


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

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

..应该......

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

但......在您的情况下......

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

用户

oneToMany,mappedBy

<强>地址

ManyToOne,inversedBy(+ JoinColumn)


提示

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

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

为什么数据库中存在这些复杂的id列...是否足以让表用户具有列ID?