deleteAction: почему удаляются категории, связанные с этим блогом?

Я работаю над этим интерфейсом, используя Symfony2, здесь у меня есть блоги и связанные с ними категории, иногда мы хотим удалить блоги, которые больше не действительны, поэтому я хочу удалить только блог, я добавил эту функцию в контроллер, он удаляет блог, но в то же время удаляет все связанные категории:

        public function deleteAction(Request $request, $id)
        {
            $form = $this->createDeleteForm($id);
            $form->bind($request);

            if ($form->isValid()) {
                $em = $this->getDoctrine()->getManager();
                $blawg = $em->getRepository('BlogBundle:Blog')->find($id);

                if (!$blog) {
                    throw $this->createNotFoundException('Unable to find Blog entity.');
                }

                $em->remove($blog);
                $em->flush();
            }

            return $this->redirect($this->generateUrl('blogs_inactive'));
        }

Что я могу сделать, чтобы просто удалить информацию о блоге? Внутри БД у меня есть следующие таблицы (Объекты на Synfony2): Блог, Лента, Категории, Сообщения в блогах.

Объект блога:

/**
 * @var Category[]
 *
 * @ORM\ManyToMany(targetEntity="Category", cascade={"all"})
 * @ORM\JoinTable(name="blog_categories",
 *      joinColumns={@ORM\JoinColumn(name="blog_id", referencedColumnName="blog_id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="category_id")}
 * )
 */
private $categories;


/**
 * @var Feed
 * @ORM\OneToOne(targetEntity="Feed", mappedBy="blog", cascade={"all"})
 */
private $feed;


/**
 * @var ArrayCollection $posts
 * @ORM\OneToMany(targetEntity="BlogPost", mappedBy="blog")
 */
private $posts;

Объект фида:

/**
 * @var Blawg
 *
 * @ORM\ManyToOne(targetEntity="Blog")
 * @ORM\JoinColumn(name="blog_id", referencedColumnName="blog_id",
 * onDelete="CASCADE")
 */
private $blawg;

person Luis Franco    schedule 24.04.2013    source источник
comment
Пожалуйста, опубликуйте свой blog.orm.yml/feed.orm.yml/categories.orm.yml, если они у вас есть, или коды объектов, если вы используете аннотации.   -  person Lighthart    schedule 24.04.2013


Ответы (2)


Как говорит Ренан Иво, у вас может быть одна из таких ситуаций:

1) cascade={"remove"} на внешний ключ (со стороны блога), который также определяет запись категории
2) имеет ON DELETE триггер на уровне базы данных. Пожалуйста, взгляните также на свою схему SQL

person DonCallisto    schedule 24.04.2013

Это похоже на каскад капель.

Взгляните на свои сущности. Вероятно, у вас есть либо cascade={"remove"} в определении отношения, либо триггер ON DELETE в базе данных. Этот ответ может помочь и вам:

При удалении каскада с доктриной2

person Renan Ivo    schedule 24.04.2013