Доктрина 2 Каскад ManyToMany

Возможно ли в 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. Явно сохраните новый объект или настройте каскадные операции сохранения для отношения».


person awattar    schedule 17.02.2011    source источник


Ответы (1)


Вы должны применить cascade={"persist"} к сущности Роль.

Не эксперт по Doctrine, но я думаю, что Doctrine проверяет связанный объект на наличие каскадных опций.

Поскольку вы каскадируете сохранение от Пользователей до Ролей, оно проверяет Роль. объект, если он должен быть сохранен с каскадом.

person Hakan Deryal    schedule 25.02.2011
comment
как в @OneToOne(targetEntity=My_Model_FasciaEta, cascade={persist}) - person max4ever; 18.11.2011