EDIT:Mit all den neuen Daten verstehe ich genau, was Sie erreichen wollen.
Also habe ich meine alte Funktion bearbeitet, dies ist eine neue, die direkt in Ihrem Code funktionieren sollte. Lassen Sie es mich wissen, damit ich sie bei Bedarf anpassen kann.
public function setCategories($user_id)
{
$api = new ApiCategory($user_id);
$cats = $api->getCategories(); // retrieves structure above
$newCats = null;
self::recursiveCatTree($newCats, $cats);
$this->categories = $newCats;
$this->save(); // save the entire array of embedded documents
if($this->getErrors())
var_dump($this->getErrors);
}
public static function recursiveCatTree(&$result, $parent)
{
$children = $parent['children'];
//we unset the children so we dont have manually set every other variable
unset( $parent['children']);
$result = new Category();
$result->attributes = $parent;
//then loop the children, if no children it wont loop
// so it will just be an empty array
foreach($children as $child)
{
$baby = null;
self::recursiveCatTree($baby, $child);
$result->children[] = $baby;
}
}