doctrine一对一地使用注释自动持久化id

时间:2014-10-27 13:15:16

标签: symfony doctrine-orm annotations persistence one-to-one

我有一个难以解决的问题,即使看起来我正在应用其他找到的好食谱。

我收到以下错误:

  

AppBundle \ Entity \ User \ Student类型的实体缺少已分配的ID   对于字段'用户'。此实体的标识符生成策略   需要在EntityManager#persist()之前填充ID字段   叫做。如果您想要自动生成标识符而不是您   需要相应地调整元数据映射。

我有一个学说2我的实体用户和学生在symfony 2之间的一对一关系,当我用一个学生的子表格持有用户时,我希望学生的id自动设置为id的用户。

我有两个班级:

class Student
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer", length=11)
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Id
     * @ORM\OneToOne(targetEntity="\AppBundle\Entity\User\User", inversedBy="student")
     * @ORM\JoinColumn(name="id", referencedColumnName="id", nullable=false, unique=true, onDelete="cascade")
     */
    private $user;
...
}


class User
{

    /**
     * @ORM\OneToOne(targetEntity="\AppBundle\Entity\User\Student", mappedBy="user", cascade={"persist"})
     */
    private $student;
}

当我坚持实体时,我有上述错误。如果我打电话

  

$实体 - > getStudent() - > SETUSER($实体);

在我坚持实体之前,它很好,我让学生持有与用户相同的id,除了我不想在我用来持久化的方法中具体,因为我使用表单管理器作为服务其他行动也很常见。

那么是否可以设置一些注释以使学说在创建学生时自动将学生ID设置为等于用户ID? 如果是,那怎么回事?

非常感谢, 此致

1 个答案:

答案 0 :(得分:0)

修改

我见过你更新了你的问题。如果可能的话,我不是很狡猾,但尝试类似

class Student
{
    /**
     * @ORM\Column(name="id", type="integer", nullable=false, unique=true)
     * @ORM\Id
     */
    private $id;

    /**
     * @ORM\OneToOne(targetEntity="\AppBundle\Entity\User\User", inversedBy="student")
     * @ORM\JoinColumn(name="id", referencedColumnName="id", nullable=false, unique=true, onDelete="cascade")
     */
    private $user;

    // ...
}

我回到使用id列,但之前没有自动增量定义它。