예제 #1
0
 public function deleteSubtree(Section $section)
 {
     //Update deleted subtree
     $queryBuilder = $this->_em->createQueryBuilder();
     $queryBuilder->update('Icap\\WikiBundle\\Entity\\Section', 'section')->set('section.left', 0)->set('section.right', 0)->set('section.level', -1)->set('section.parent', '?1')->set('section.deleted', '?2')->set('section.deletionDate', '?3')->andWhere('section.root = :root')->andWhere($queryBuilder->expr()->gte('section.left', $section->getLeft()))->andWhere($queryBuilder->expr()->lte('section.right', $section->getRight()))->setParameter(1, null)->setParameter(2, true)->setParameter(3, new \DateTime('NOW'))->setParameter('root', $section->getRoot());
     $queryBuilder->getQuery()->getSingleScalarResult();
     $boundaryWidth = $section->getRight() - $section->getLeft() + 1;
     //Update boundaries (left and right) for all nodes after deleted node
     $queryBuilder = $this->_em->createQueryBuilder();
     $queryBuilder->update('Icap\\WikiBundle\\Entity\\Section', 'section')->set('section.right', 'section.right-?1')->andWhere('section.root = :root')->andWhere($queryBuilder->expr()->gt('section.right', $section->getRight()))->setParameter(1, $boundaryWidth)->setParameter('root', $section->getRoot());
     $queryBuilder->getQuery()->getSingleScalarResult();
     $queryBuilder = $this->_em->createQueryBuilder();
     $queryBuilder->update('Icap\\WikiBundle\\Entity\\Section', 'section')->set('section.left', 'section.left-?1')->andWhere('section.root = :root')->andWhere($queryBuilder->expr()->gt('section.left', $section->getRight()))->setParameter(1, $boundaryWidth)->setParameter('root', $section->getRoot());
     $queryBuilder->getQuery()->getSingleScalarResult();
 }