Symfony2学说插入实体与相关 - 不更新



我在使用相关实体userProfile插入用户实体时有问题。

class User
{
/**
 * @var integer
 *
 * @ORMId
 * @ORMColumn(name="id", type="integer",  options={"unsigned"=true})
 * @ORMGeneratedValue(strategy="AUTO")
 */
protected $id;
/**
 * @var UserProfile
 *
 * @ORMOneToOne(targetEntity="UserProfile", mappedBy="user", cascade={"persist", "remove"})
 */
protected $profile
....
}

class UserProfile
{
/**
 * @var User
 *
 * @ORMId
 * @ORMGeneratedValue
 * @ORMOneToOne(targetEntity="User",  inversedBy="profile" )
 * @ORMJoinColumn(name="user_id", referencedColumnName="id")
 */
protected $user;
.....
}

标准的用户 - 用户填充双向关系。当我提交表单包含来自用户实体和用户填充实体的字段时,$ form-> getData()为我提供了用户对象的用户对象。到目前为止还不错。

mySQL通过自动灌溉PK生成独特的身份。要插入实体,我必须做:

$em->persist($user)
$em->flush() 

将PK作为持续和齐平的用户for的ID。

但学说不能插入$用户,因为$用户对象具有相关的$ user->从表单类型接收到

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
     ->add('email', 'email', array('label' => 'email'))
     ->add('profile', new RegistrationProfileFormType(), array('required'=>true,))
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'User',
        'cascade_validation'=>true,
    ));
}

更新:异常msg 类型实体的实体 UserProfile具有通过外国实体实体用户具有身份,但是该实体本身没有身份。您必须在相关实体上调用EntityManager#Persist(),并确保在尝试坚持" Entity userProfile"之前生成标识符。如果是插入ID ID生成(例如MySQL自动increment或postgresql serial),这意味着您必须在两个持久操作之间调用EntityManager#flush()。

问:如何正确处理此问题?

对不起我的生锈的英语。

问题是,您将通过不拥有一侧来蠕动对象。拥有一方是具有"反向"属性的一方。而且您应该以这种方式持续存在。

您可以在此处阅读更多有关它的信息:http://docs.doctrine-project.org/en/latest/reference/unitofwork-associations.html

所以,示例您的情况:

$profile->setUser($user);
$em->persist($profile).
$em->flush();

,尽管您想保持自己已经拥有的方式,但是有两个选择:

1)将User实体作为拥有侧,而UserProfile作为逆侧

2)在User类中的个人资料设置器中,做类似的事情:

public function setUserProfile(UserProfile $profile)
{
    $this->profile = $profile;
    $this->profile->setUser($this);
}

编辑:

我只是注意到您在UserProfile实体中没有" ID"字段 - 可能是原因。最简单的方法是单独的原始钥匙和外国钥匙。但是,如果您想将外国视为主要,请看一下这篇文章:http://docs.doctrine-project.org/en/latest/tutorials/composite-primary-keys.html#identity-through-trough-foreign-foreign-foreign-entities

相关内容

  • 没有找到相关文章

最新更新