是否有可能在持续存在之后和在Doctrine2中刷新之前获取实体的ID?

时间:2012-08-20 08:11:37

标签: php symfony doctrine-orm

我有User登录注册页。

现在在同一页面上我还有一个表格,UserInterests

现在我有PostPersist功能,在用户保持

后创建新的UserProfile

现在,UserProfile与用户ID相关联,UserInterestsUserProfile ID

相关联

现在客户端希望UserInterests在同一个用户页面上,但我有问题,即尚未创建UserProfile。现在怎么能坚持下去。有什么办法

1 个答案:

答案 0 :(得分:4)

我不认为你可以在冲洗前获得身份证。

您可以在模型之间创建关联,这样,Doctrine会在保存时处理id,您可以使用以下内容检索UserInterests:

$user->getProfile()->getInterests();

因此,您的User模型将具有包含UserProfile的属性:

/**
 * @OneToOne(targetEntity="UserProfile")
 * @JoinColumn(name="profile_id", referencedColumnName="id")
 **/
private $profile;

并且您的UserProfile类应具有保存UserInterests模型的属性。

/**
 * @OneToOne(targetEntity="UserInterests")
 * @JoinColumn(name="interests_id", referencedColumnName="id")
 **/
private $interests;

您现在可以创建一个空的$ userProfile模型(将其他模型链接在一起,实际填充可以在postPersist函数中完成)和$ userInterests模型,将它们关联起来

$interests = new UserInterests();

// create an empty UserProfile, and fill it in your PostPersist function, 
// that way it can already be used to link the User and UserInterests
$profile = new UserProfile();

$profile->setInterests($interests);
$user->setProfile($profile);

现在,Doctrine会在持久化时填写ID,你不需要担心它们。

更多信息here