我想达到的目标:
User实体具有UserInfo属性,用于存储User的所有信息。当User实体创建并链接这两个实体时,我不想创建UserInfo实体。
UserType:
...
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username')
->add('password', 'password') //drugi argument robi input jako password
;
$builder->add('info', new UserInfoType());
}
...
用户:...
/**
* @var UserInfo
*
* @ORM'OneToOne(targetEntity="UserInfo", mappedBy="owner", cascade={"persist", "remove"})
* */
private $info;
...
用户信息:
/**
* @var User
*
* @ORM'OneToOne(targetEntity="User", inversedBy="info", cascade={"persist"})
* @ORM'JoinColumn(name="owner_id", referencedColumnName="id")
**/
private $owner;
...
/**
* Set owner
*
* @param 'Custom'AzureusBundle'Entity'User $owner
* @return UserInfo
*/
public function setOwner('Custom'AzureusBundle'Entity'User $owner)
{
$owner->setInfo($this);
$this->owner = $owner;
return $this;
}
为什么创建用户和UserType在同一时间(同一形式)userInfo没有owner_id值在数据库中?这些实体在创建后不能相互链接。
我假设我应该在某处调用setOwner()函数。但是我不知道在哪里。
正如@Cerad在上面的评论中所说,我应该在用户控制器中创建UserInfo(创建函数)
public function createAction(Request $request)
{
$entity = new User();
$user_info = new UserInfo();
$entity->setInfo($user_info);
$user_info->setOwner($entity);
...
if ($form->isValid()) {
...
$em->persist($entity);
$em->persist($user_info);
...