我有2个实体:User
和Avatar
。每个用户都可以从列表中选择一个头像,所以我认为这是一个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"
}
答案 0 :(得分:1)
您不需要avatarId
字段,因为avatar
字段会自动处理它。您可以使用@JoinColumn
注释明确设置引用列名称。
答案 1 :(得分:1)
一些事情:
ID列通常使用以下注释生成:
/**
* @ORM\Id @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
这告诉ORM在创建新对象时自动生成一个值,因此当您转储对象时,它将在持久化之前具有值。
关于你的OneToOne关系的说明,如果Avatars可以被该列表中的多个人使用,那将是ManyToOne关系(许多用户对一个头像,一个头像对许多用户)。