public function transferPackage(Entity\Package $package) { $em = $this->getServiceLocator()->get('Doctrine\\ORM\\EntityManager'); $newPackage = clone $package; $newPackage->setOrder($package->getOrder()); foreach ($package->getItems() as $item) { if ($item->hasParentItems()) { continue; } $newItem = clone $item; $item->setTransferredItem($newItem); $item->setStatus('transferred'); $item->setPackage($package); $em->persist($item); $newPackage->addItem($newItem); $newItem->setPackage($newPackage); $em->persist($newItem); } $package->setTransferredPackage($newPackage); $em->persist($package); return $newPackage; }