我有一个包含部门的数据库表。我有另一张桌子,里面有人。正如您所期望的那样,一个部门包含很多人,而一个人属于一个部门。
当我想将一个新人持久保存到数据库时,我创建了一个 Person 对象并尝试将其 Department 属性设置为由实体管理器管理的现有Department 对象。但是,当我尝试坚持我的新 Person 时,我得到一个异常:
通过关系 'Entities\Person#department' 找到了一个新实体,该关系未配置为实体的级联持久化操作:Entities\Department@0000000016abe202000000000d29dd37。要解决这个问题:要么在这个未知实体上显式调用 EntityManager#persist(),要么配置级联在映射中保持此关联,例如 @ManyToOne(..,cascade={"persist"})。
我不完全理解该部门是“未知实体”的异常部分,因为我通过实体管理器提取了它。
cascade: ["persist"]
正如异常所暗示的,我在 yml 元数据 ( ) 中插入了一个级联。然后我的人被保存了,但我最终在部门表中得到了一个重复的部门,并带有一个新的 ID。
这一定是一个非常常见的用例。我在下面包含了我的代码和元数据。我应该做出哪些改变?
元数据:
Entities\Person
type: entity
table: people
fields:
...
departmentId:
type: integer
unsigned: false
nullable: false
column: department_id
...
manyToOne:
department:
targetEntity: Entities\Department
joinColumn: department_id
referenceColumnName: id
代码:
$department = $em->getRepository('Department')->findOneBy(array('name' => $departmentName);
$person = new Person();
$person->setName('Joe Bloggs');
$person->setDepartment($department);
$em->persist($person);
$em->flush();