/**
  * Sets the parents and recursively removes categories with bad parents
  *
  * @param array &$categories
  * @param array $parents
  * @param array $items
  */
 protected function setParents(array &$categories, array $parents, array $items)
 {
     $invalidCodes = [];
     foreach ($categories as $code => $category) {
         $parentCode = $parents[$code];
         if (!$parentCode) {
             continue;
         }
         if (isset($categories[$parentCode])) {
             $parent = $categories[$parentCode];
         } else {
             $parent = $this->doctrineCache->find($this->class, $parentCode);
         }
         if ($parent) {
             $category->setParent($parent);
         } else {
             $invalidCodes[] = $code;
         }
     }
     if (count($invalidCodes)) {
         foreach ($invalidCodes as $code) {
             $this->setItemErrors($items[$code], ['parent' => [['No category with code %code%', ['%code%' => $parents[$code]]]]]);
             unset($categories[$code]);
         }
         $this->setParents($categories, $parents, $items);
     }
 }
 /**
  * Finds the object in the cache
  *
  * @param string $class
  * @param string $value
  *
  * @return object
  */
 protected function findObject($class, $value)
 {
     return $this->doctrineCache->find($class, $value);
 }