【发布时间】:2014-12-13 19:09:26
【问题描述】:
我有一个名为User 的实体,它继承了Student、Professional 和Business。
当用户注册时,只有User,但他们必须更新他们的个人资料并选择用户类型,我有一个处理这个的表单,一个获取表单数据的控制器,但我不能用$userEntity->setType()更新鉴别器字段type
这是我的地图资料
class User
{
const TYPE_BASIC = "Basico";
const TYPE_STUDENT = "Estudiante";
const TYPE_PROFESSIONAL = "Profesional";
const TYPE_BUSINESS = "Empresa";
protected $type = self::TYPE_BASIC;
public function getType()
{
return self::TYPE_BASIC;
}
public function setType($type)
{
$this->type = $type;
}
class Student extends User
{
protected $type = self::TYPE_STUDENT;
然后是 Professional 和 Business,就像 Student(更改 const)
<entity name="User" table="user_base" inheritance-type="JOINED">
<discriminator-column name="type" type="string"/>
<discriminator-map>
<discriminator-mapping value="Basico" class="User"/>
<discriminator-mapping value="Estudiante" class="Student"/>
<discriminator-mapping value="Profesional" class="Professional"/>
<discriminator-mapping value="Empresa" class="Business"/>
</discriminator-map>
子表被命名为user_xxx 其中xxx = Student/Professional/Business
这是我的控制器
if($form->isValid())
{
$em = $this->getDoctrine()->getManager();
$data = $form->all();
$type = $data['type']->getData();
$email = $data['email']->getData();
$profile = $data['profile']->all();
$name = $profile['name']->getData();
$lastName = $profile['lastName']->getData();
$birth = $profile['birth']->getData();
$profileEntity = new Profile();
$profileEntity->setBirth($birth);
$profileEntity->setName($name);
$profileEntity->setLastName($lastName);
$profileEntity->setUser($user);
$em->persist($profileEntity);
ladybug_dump($type);
$userEntity = $em->getRepository('User')->find($user);
$userEntity->setProfile($profileEntity);
$userEntity->setType($type);
if($user->getEmail() != $email)
$userEntity->setEmail($email);
$em->persist($userEntity);
$em->flush();
}
除了type 字段外,所有内容都被保留,它仍然是原始数据。我知道当我更改鉴别器列时,我需要在它的子元素内创建一个新行,但首先我想知道如何更改鉴别器列。
【问题讨论】:
标签: mysql symfony inheritance doctrine-orm dql