首页 > 解决方案 > 教义不保存关系

问题描述

我有这个关系:

UserRole

    /**
     * @ORM\ManyToOne(targetEntity="Brand", inversedBy="managers")
     * @ORM\JoinColumn(referencedColumnName="id")
     */
    private $brandManage;

在品牌

    /**
     * @ORM\OneToMany(targetEntity="UserRole", mappedBy="brandManage")
     */
    private $managers;

在用户

    /**
     * @ORM\OneToOne(targetEntity="UserRole", mappedBy="user", cascade={"persist"})
     */
    private $role;

现在我正在尝试为 in 分配一个品牌brandManageUserRole但数据库没有更新;即使在保存之前正确更新了实体(使用转储检查),关系也始终为 Null

出于问题的目的,我使用了三种方法来保存,如下所示;他们都没有工作!我还插入了一个die;相同的结果

$userRole->setBrandManage($brand);
$userRoleRepository->save($userRole);

$user->setRole($userRole);
$userRepository->save($user);

$this->em->persist($userRole);
$this->em->persist($user);
$this->em->flush();

现在我注意到,如果我创建一个新UserRole关系,则关系会正确保存,但如果我更新现有的UserRole.

所以我试图总是创建一个新的,但由于某种原因,学说没有保存新的UserRole,因为它说UserRole数据库中已经存在具有相同用户 ID 但它不是。我必须保存第二次UserRole才能创建新的...

编辑:如果我执行以下顺序,它可以工作,但是让它如此复杂是没有意义的......为什么我不能只保存角色?这种解决方法通过在再次保存之前删除它来有效地创建一个新UserRole的......所以回到原来的问题

$userRole->setBrandManage($brand);
$userRoleRepository->save($userRole);
                    
$user->setRole($userRole);
$userRepository->save($user);

$this->em->remove($user->getRole());
$this->em->flush();

$this->em->persist($userRole);
$this->em->persist($user);
$this->em->flush();

标签: doctrine-ormdoctrine

解决方案


保存功能已经保存在数据库中。您将在 sava 或 persist 函数之间进行选择。

$userRole->setBrandManage($brand);
$user->setRole($userRole);
// Note if you set cascade persist from user to role, you can omit that line
$this->em->persist($userRole); 
$this->em->persist($user);
$this->em->flush();

推荐阅读