【问题标题】:Doctrine 2 ManyToMany cascadeDoctrine 2 多对多级联
【发布时间】:2011-06-29 08:41:55
【问题描述】:

是否可以在 Doctrine 2 中创建两个多对多相关的对象,并仅在其中一个对象上调用 persist 来保存两者?

用户实体:

    /**
 * 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();

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

【问题讨论】:

    标签: php orm doctrine


    【解决方案1】:

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

    不是 Doctrine 专家,但我认为 Doctrine 检查关联实体的级联选项。

    由于您将持久 用户 角色,它会检查角色 实体,如果它应该被级联持久化。

    【讨论】:

    • 如@OneToOne(targetEntity="My_Model_FasciaEta", cascade={"persist"})
    猜你喜欢
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    相关资源
    最近更新 更多