FOSUserBundle并坚持数据库
我有一个从FOSUserBundle BaseUser类继承的User实体类。 另一方面是Avis实体类。
/**
* Avis
*
* @ORMTable()
* @ORMEntity
*/
class Avis
{
/**
* @var integer
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @AssertNotBlank(message = "Merci d'attribuer une note", groups = {"Default"})
*
* @ORMColumn(name="note", type="smallint")
*/
private $note;
/**
* @var string
*
* @AssertNotBlank(message = "Merci d'entrer un message", groups = {"Default"})
* @AssertLength(max = 500, maxMessage = "Votre message doit contenir au maximum {{ limit }} caractères de longueur", groups = {"Default"})
*
* @ORMColumn(name="message", type="string", length=500)
*/
private $message;
/**
* @AssertType(type="LeJardinEbeneBundleEntityUser")
*
* @ORMOneToOne(targetEntity="LeJardinEbeneBundleEntityUser", cascade={"persist"}, inversedBy="avis")
* @ORMJoinColumn(nullable=true)
*/
private $user;
/**
* User
*
* @ORMTable(name="fos_user")
* @ORMEntity
*/
class User extends BaseUser
{
/**
* @var integer
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @AssertType(type="LeJardinEbeneBundleEntityAvis")
*
* @ORMOneToOne(targetEntity="LeJardinEbeneBundleEntityAvis", mappedBy="user")
* @ORMJoinColumn(nullable=true)
*/
protected $avis;
所以阿维斯是这种双向关系的所有者。 在我的表单中,我显示Avis对象字段,并在验证表单时希望:
这是我尝试没有成功的原因:
$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);
}
谢谢。 问候,
使用一对一和多对多只有一个表可以获得一个外部索引列。 在你的情况下,“avis”表将得到一个列user_id。 所以你只需要在持久化之前设置$ user属性。 Doctrine会在(重新)加载后自动在User类中设置$ 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();
}
链接地址: http://www.djcxy.com/p/91689.html