教义2 多多样级联

2022-08-30 21:18:57

在教义2中,是否有可能创建两个多对多相关的对象,并且只在其中一个上调用持久化以保存两者?

用户实体:

    /**
 * Owning Side
 *
 * @ManyToMany(targetEntity="Role", inversedBy="users", cascade={"persist"})
 * @JoinTable(name="user_roles",
 *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="role_id", referencedColumnName="id")}
 *      )
 */
public $roles;

角色实体:

    /**
 * Inverse Side
 *
 * @ManyToMany(targetEntity="User", mappedBy="roles")
 */
public $users;

储蓄:

    $role = new Role();

    $user = new User();

$user->roles->add($role);
$role->users->add($user);

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

它不起作用,并出现错误“通过未配置为级联持久化操作的关系找到新实体:实体\Role@0000000004a29c11000000005c48cb75。显式持久化新实体或在关系上配置级联持久操作。


答案 1

应应用于角色实体。cascade={"persist"}

不是学说方面的专家,但我认为学说会检查相关实体的级联选项。

由于您要将持久性“用户”级联“角色”,因此它会检查“角色”实体是否应通过级联进行持久化。


答案 2

推荐