0

我有 2 个实体:UserAvatar. 每个用户可以从列表中选择一个头像,所以我认为这是一个 One2One 单向关系。问题是当我保存表单时该字段avatar_id始终NULL在数据库中。

让我们看看代码:

class User implements UserInterface
{
    /**
     * @var int $avatarId
     * 
     * @ORM\Column(name="avatar_id", type="integer", nullable=true)
     */    
    private $avatarId;

     /**
     * @var Avatar
     * 
     * @ORM\OneToOne(targetEntity="Avatar", cascade={"persist", "remove"})
     */
    private $avatar;  

}

当我var_dump在保存之前使用用户对象时,该字段avatarId包含该Avatar对象但未保存 id。我做错了什么?

["avatarId":"Test\UserBundle\Entity\User":private]=>
    object(Test\UserBundle\Entity\Avatar)#419 (5) {
        ["id":"Test\User\Bundle\Entity\Avatar":private]=>
            int(3)
        ["imageName":"Test\UserBundle\Entity\Avatar":private]=>
            string(14) "death-dark.jpg"
    }
4

2 回答 2

1

您不需要该avatarId字段,因为该avatar字段会自动处理它。您可以使用@JoinColumn注释显式设置引用列名称。

于 2012-04-05T14:49:03.283 回答
1

一些东西:

ID 列通常使用以下注释生成:

/**
 * @ORM\Id @ORM\Column(type="integer")
 * @ORM\GeneratedValue
 */

这告诉 ORM 在您创建新对象时自动生成一个值,因此当您转储该对象时,它将在持久化之前具有一个值。

以及关于您的 OneToOne 关系的注释,如果该列表中的多个人可以使用 Avatars,那将是 ManyToOne 关系(许多用户对一个头像,一个头像对多个用户)。

于 2012-04-05T14:52:11.677 回答