/** * Quick fix for problem when category node has its fk_parent_category_node set to itself * * @todo https://spryker.atlassian.net/browse/CD-575 * * @return void */ protected function removeCircularRelations() { $query = SpyCategoryNodeQuery::create(); $query->innerJoinCategory()->useCategoryQuery()->innerJoinAttribute()->endUse()->orderByFkParentCategoryNode()->orderByNodeOrder('DESC')->where(SpyCategoryNodeTableMap::COL_FK_CATEGORY . ' = ' . SpyCategoryNodeTableMap::COL_FK_PARENT_CATEGORY_NODE)->_and()->where(SpyCategoryNodeTableMap::COL_IS_ROOT . ' = false'); $badNodes = $query->find(); foreach ($badNodes as $entityToMoveToRoot) { if ($entityToMoveToRoot->isRoot()) { continue; } printf("Removing circular referenced node: %s from [%d]<br/>\n", $entityToMoveToRoot->getCategory()->getAttributes()->getFirst()->getName(), $entityToMoveToRoot->getFkParentCategoryNode()); $this->delete($entityToMoveToRoot->getIdCategoryNode()); $query = SpyCategoryNodeQuery::create(); $query->innerJoinCategory()->useCategoryQuery()->innerJoinAttribute()->endUse()->orderByFkParentCategoryNode()->orderByNodeOrder('DESC')->where(SpyCategoryNodeTableMap::COL_FK_PARENT_CATEGORY_NODE . ' = ?', $entityToMoveToRoot->getIdCategoryNode())->_and()->where(SpyCategoryNodeTableMap::COL_IS_ROOT . ' = false'); $badChildrenToRemove = $query->find(); foreach ($badChildrenToRemove as $badChild) { $this->delete($badChild->getIdCategoryNode()); $badChild->delete(); } $entityToMoveToRoot->delete(); } }
/** * @param null $modelAlias * @param \Propel\Runtime\ActiveQuery\Criteria|null $criteria * * @return \Orm\Zed\Category\Persistence\SpyCategoryNodeQuery */ public function createCategoryNodeQuery($modelAlias = null, Criteria $criteria = null) { return SpyCategoryNodeQuery::create($modelAlias, $criteria); }