Source of file ExtrasHydrator.php

Size: 1,391 Bytes - Last Modified: 2023-11-16T22:56:02+01:00

/home/websites/teicee/packagist/site/phpdoc/conf/../vendor/teicee/dorm-bundle/src/Hydration/ExtrasHydrator.php

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
<?php
namespace TIC\DormBundle\Hydration;

use Doctrine\ORM\Internal\Hydration\ObjectHydrator;

/**
 * Récupération d'une liste d'entités en intégrant les résultats de colonnes supplémentaires dans des propriétés.
 * Note: les entités doivent disposer d'une propriété correspondante accessible (public ou avec setter/mutator)
 *
 * Exemple:
 *   > SELECT a, COUNT(a.extras) AS nbExtras FROM t
 *   < array( a1, a2, a3... ) avec a1.nbExtras, a2.nbExtras...
 */
class ExtrasHydrator extends ObjectHydrator
{

	/**
	 * Hydrates all rows from the current statement instance at once.
	 *
	 * @return mixed[]
	 */
	protected function hydrateAllData(): array
	{
		$result = array();
		
		foreach (parent::hydrateAllData() as $row) {
			if (! \is_object($row[0])) continue;
			
			foreach ($row as $field => $value) {
				if (! \is_int($field)) $this->setExtraField($row[0], $field, $value);
			}
			$result[] = $row[0];
		}
		
		return $result;
	}

	/**
	 * @param   Object  $object         Entity
	 * @param   string  $property       Field name
	 * @param   string  $value          Field value
	 */
	protected function setExtraField($object, $property, $value)
	{
		$mutator = 'set' . \ucfirst($property);
		if (\method_exists($object, $mutator)) return \call_user_func(array($object, $mutator), $value);
		if (\property_exists($object, $property)) $object->{$property} = $value;
	}

}