1<?php 2 3namespace DeepCopy\Filter\Doctrine; 4 5use DeepCopy\Filter\Filter; 6use DeepCopy\Reflection\ReflectionHelper; 7 8/** 9 * @final 10 */ 11class DoctrineCollectionFilter implements Filter 12{ 13 /** 14 * Copies the object property doctrine collection. 15 * 16 * {@inheritdoc} 17 */ 18 public function apply($object, $property, $objectCopier) 19 { 20 $reflectionProperty = ReflectionHelper::getProperty($object, $property); 21 22 $reflectionProperty->setAccessible(true); 23 $oldCollection = $reflectionProperty->getValue($object); 24 25 $newCollection = $oldCollection->map( 26 function ($item) use ($objectCopier) { 27 return $objectCopier($item); 28 } 29 ); 30 31 $reflectionProperty->setValue($object, $newCollection); 32 } 33} 34