FOSUserBundle 并保存在数据库中
FOSUserBundle and persisting in database
我有一个继承自 FOSUserBundle BaseUser class 的用户实体 class。
另一边是 Avis 实体 class。
/**
* Avis
*
* @ORM\Table()
* @ORM\Entity
*/
class Avis
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @Assert\NotBlank(message = "Merci d'attribuer une note", groups = {"Default"})
*
* @ORM\Column(name="note", type="smallint")
*/
private $note;
/**
* @var string
*
* @Assert\NotBlank(message = "Merci d'entrer un message", groups = {"Default"})
* @Assert\Length(max = 500, maxMessage = "Votre message doit contenir au maximum {{ limit }} caractères de longueur", groups = {"Default"})
*
* @ORM\Column(name="message", type="string", length=500)
*/
private $message;
/**
* @Assert\Type(type="LeJardinEbene\Bundle\Entity\User")
*
* @ORM\OneToOne(targetEntity="LeJardinEbene\Bundle\Entity\User", cascade={"persist"}, inversedBy="avis")
* @ORM\JoinColumn(nullable=true)
*/
private $user;
/**
* User
*
* @ORM\Table(name="fos_user")
* @ORM\Entity
*/
class User extends BaseUser
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @Assert\Type(type="LeJardinEbene\Bundle\Entity\Avis")
*
* @ORM\OneToOne(targetEntity="LeJardinEbene\Bundle\Entity\Avis", mappedBy="user")
* @ORM\JoinColumn(nullable=true)
*/
protected $avis;
所以 Avis 是这个双向关系的所有者。
在我的表单中,我显示了 Avis 对象字段,并且在验证我想要的表单时:
- Avis 将保存在数据库中(已经有效)
- 关系也将被保留 => user_id 在 Avis table 和 avis_id 在 fos_user table
这是我尝试过但没有成功的方法:
$user = $this->getUser();
$form = $this->createForm('avis', $avis);
$form->handleRequest($request);
$avis = new Avis();if ($form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($avis);
$entityManager->flush();
if($user) {
$userManager = $this->get('fos_user.user_manager');
$userManager->updateUser($avis->getUser(), true);
}
谢谢。
此致,
对于一对一和多对多,只有一个 table 获得外部索引列。在您的情况下,"avis" table 将得到一列 user_id。所以你只需要在你坚持之前设置 $user 属性 。 Doctrine 将在(重新)加载后自动在用户 class 中设置 $avis 属性。
$user = $this->getUser();
$avis = new Avis();
$form = $this->createForm('avis', $avis);
$form->handleRequest($request);
if ($form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$avis->setUser($user);
$entityManager->persist($avis);
$entityManager->flush();
}
我有一个继承自 FOSUserBundle BaseUser class 的用户实体 class。 另一边是 Avis 实体 class。
/**
* Avis
*
* @ORM\Table()
* @ORM\Entity
*/
class Avis
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @Assert\NotBlank(message = "Merci d'attribuer une note", groups = {"Default"})
*
* @ORM\Column(name="note", type="smallint")
*/
private $note;
/**
* @var string
*
* @Assert\NotBlank(message = "Merci d'entrer un message", groups = {"Default"})
* @Assert\Length(max = 500, maxMessage = "Votre message doit contenir au maximum {{ limit }} caractères de longueur", groups = {"Default"})
*
* @ORM\Column(name="message", type="string", length=500)
*/
private $message;
/**
* @Assert\Type(type="LeJardinEbene\Bundle\Entity\User")
*
* @ORM\OneToOne(targetEntity="LeJardinEbene\Bundle\Entity\User", cascade={"persist"}, inversedBy="avis")
* @ORM\JoinColumn(nullable=true)
*/
private $user;
/**
* User
*
* @ORM\Table(name="fos_user")
* @ORM\Entity
*/
class User extends BaseUser
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @Assert\Type(type="LeJardinEbene\Bundle\Entity\Avis")
*
* @ORM\OneToOne(targetEntity="LeJardinEbene\Bundle\Entity\Avis", mappedBy="user")
* @ORM\JoinColumn(nullable=true)
*/
protected $avis;
所以 Avis 是这个双向关系的所有者。 在我的表单中,我显示了 Avis 对象字段,并且在验证我想要的表单时:
- Avis 将保存在数据库中(已经有效)
- 关系也将被保留 => user_id 在 Avis table 和 avis_id 在 fos_user table
这是我尝试过但没有成功的方法:
$user = $this->getUser();
$form = $this->createForm('avis', $avis);
$form->handleRequest($request);
$avis = new Avis();if ($form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($avis);
$entityManager->flush();
if($user) {
$userManager = $this->get('fos_user.user_manager');
$userManager->updateUser($avis->getUser(), true);
}
谢谢。 此致,
对于一对一和多对多,只有一个 table 获得外部索引列。在您的情况下,"avis" table 将得到一列 user_id。所以你只需要在你坚持之前设置 $user 属性 。 Doctrine 将在(重新)加载后自动在用户 class 中设置 $avis 属性。
$user = $this->getUser();
$avis = new Avis();
$form = $this->createForm('avis', $avis);
$form->handleRequest($request);
if ($form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$avis->setUser($user);
$entityManager->persist($avis);
$entityManager->flush();
}