doctrine-orm - 教义不保存关系
问题描述
我有这个关系:
在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 分配一个品牌brandManage
,UserRole
但数据库没有更新;即使在保存之前正确更新了实体(使用转储检查),关系也始终为 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();
解决方案
保存功能已经保存在数据库中。您将在 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();
推荐阅读
- google-apps-script - CURL XHR Google App Script - 我想不通
- php - Symfony 5:如何在集成测试中模拟 HttpClientInterface?
- php - 如何显示在 laravel 中上传的文件?
- .net-core - 从命令行修复 dotnet core 的代码样式规则
- ant-design-pro - 使用 antdesignpro 自定义语言环境
- linux - u-boot:cmd mdtparts 找不到 nor0
- github - 添加依赖项?
- java - 如何处理精度点?
- java - 卡夫卡 - 突触
- c# - 为什么一类给出 CS0311 错误而另一类没有?