Возможно ли в Doctrine 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();
Он не работает и бросает сообщение об ошибке «Новый объект был найден через отношения, которые не были сконфигурированы для каскадных операций persist: Entities \ Role @ 0000000004a29c11000000005c48cb75. Явно сохраняйте новый объект или настраивайте операции каскадирования с сохранением отношения».
Вы должны применить cascade={"persist"}
к объекту Role.
Не эксперт по Doctrine, но я думаю, что Doctrine проверяет связанный объект для каскадных параметров.
Поскольку вы каскадируете сохранение от пользователей до ролей , он проверяет объект Role, если он должен сохраняться с помощью каскада.