@Seintero

Doctrine OneToMany и ManyToOne, как прописать каскадное удаление?

Никак не могу добиться, чтобы при удалении одной сущности, в связанной с ней сущностью обнулялся ключ. Например

/**  
     * @ORM\OneToMany(targetEntity="User", mappedBy="division")
     */
    private $users;


/**
     * @ORM\ManyToOne(targetEntity="Division", inversedBy="users")
     * @ORM\JoinColumn(name="division_id", referencedColumnName="id", onDelete="SET NULL")
     */
    private $division;


Т.е. я хочу, чтобы когда удаляется Division , сущность пользователя не удалялась, но ключ division_id у неё обнулялся. И никак не могу это победить. Если прописать cascade={"remove"} со стороны OneToMany , то удалятся все сущности, а это не совсем то, что меня интересует. Надеюсь кто-нибудь сможет подсказать, как это правильно организовывается на уровне доктрины? :(
  • Вопрос задан
  • 2507 просмотров
Пригласить эксперта
Ответы на вопрос 1
@iddqd3
class User {
     /**  
     * @ORM\OneToMany(targetEntity="Division", mappedBy="division")
     */
    private $users;
}

class Division {
     /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="users")
     * @ORM\JoinColumn(name="division_id", referencedColumnName="id", onDelete="CASCADE")
     */
    private $division;
}


При удалении User удалятся все Division, но при удалении одного Division поле $users не будет NULL потому, что в таблице User даже поля division не будет.
Для проверки на пустоту нужно будет сделать что-то типа такого
$user->getUsers()->isEmpty()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы