function apply(Elite_Vaf_Model_Vehicle $descendant) { $titles = $descendant->toTitleArray(); $levelsToReplace = $this->getSchema()->getPrevLevelsIncluding($this->grain); foreach ($levelsToReplace as $levelToReplace) { $replacementTitle = $this->vehicle()->getLevel($levelToReplace)->getTitle(); $titles[$levelToReplace] = $replacementTitle; } foreach ($this->newTitles as $replacementTitle) { $titles[$this->grain] = $replacementTitle; $new_vehicle = Elite_Vaf_Model_Vehicle::create($this->getSchema(), $titles); $new_vehicle->save(); $this->mergeFitments($descendant, $new_vehicle); } }