public function calculateGeneration(Skill $skill) { if ($this->processedGenerationSkills->contains($skill)) { return; } $this->lineage = []; $generation = 1; $ancestors = $this->getAncestors($skill); if (count($ancestors)) { $root = $this->findRoot($ancestors); if ($root !== null) { $generation = $this->nextStep($root, $skill, $ancestors); } } $skill->setGeneration($generation); $skill->clearLineagesRelatedBySkillId(); // set generations foreach ($this->lineage as $pos => $ancestor) { $lin = new Lineage(); $lin->setSkill($skill); $lin->setAncestor($ancestor); $lin->setPosition($pos); } $this->modifiedSkills->add($skill); $this->processedGenerationSkills->add($skill); $this->processGenerationQueue(); }