我需要用他的个人资料字段保存用户。我建立了关系。用户有一个配置文件,配置文件有一个用户。我添加字段到注册表单。但是当我保存对象时,我得到错误, 未定义的索引:/var/www/Symfony/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php第2714行中的配置文件。我的错误,请帮助我。我是新手) 这是代码: 命名空间Acme \ UserBundle \ Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Profile
*
* @ORM\Table(name="acme_profile")
* @ORM\Entity
*/
class Profile
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="fio", type="string", length=255)
*/
protected $fio;
/**
* @ORM\Column(name="birthDate", type="date")
*/
protected $birthDate;
/**
* @ORM\OneToOne(targetEntity="Acme\UserBundle\Entity\User", cascade={"persist"})
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* @return mixed
*/
public function getFio()
{
return $this->fio;
}
/**
* @param $fio
* @return $this
*/
public function setFio($fio)
{
$this->fio = $fio;
return $this;
}
/**
* @return mixed
*/
public function getBirthDate()
{
return $this->birthDate;
}
/**
* @param $birthDate
* @return $this
*/
public function setBirthDate($birthDate)
{
$this->birthDate = $birthDate;
return $this;
}
/**
* @return mixed
*/
public function getUser()
{
return $this->user;
}
/**
* @param User $user
* @return $this
*/
public function setUser(User $user = null)
{
$this->user = $user;
return $this;
}
}
namespace Acme\UserBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity
* @ORM\Table(name="acme_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToOne(targetEntity="Acme\UserBundle\Entity\Profile", cascade={"persist"})
*/
protected $profile;
public function __construct()
{
parent::__construct();
}
public function setProfile(Profile $profile = null)
{
$this->profile = $profile;
return $this;
}
public function getProfile()
{
return $this->profile;
}
}
namespace Acme\UserBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class RegistrationFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
// add your custom field
$builder->add('profile', new ProfileType());
}
public function getParent()
{
return 'fos_user_registration';
}
public function getName()
{
return 'acme_user_registration';
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\UserBundle\Entity\User'
));
}
}
答案 0 :(得分:1)
您应该使用此处文档中指定的MappedBy和InversedBy:http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#owning-side-and-inverse-side
/**
* @ORM\OneToOne(targetEntity="Acme\UserBundle\Entity\Profile",
mappedBy="user"))
*/
和你使用的另一面:
/**
* @ORM\OneToOne(targetEntity="Acme\UserBundle\Entity\User", inversedBy="profile" cascade={"persist"})
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/