Source of file GroupobjHydrator.php

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

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

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
<?php
namespace TIC\DormBundle\Hydration;

use Doctrine\ORM\Internal\Hydration\ObjectHydrator;

/**
 * Récupération d'une liste d'entités en les regroupants selon la valeur d'une colonne supplémentaire.
 *
 * Exemple:
 *   > SELECT a, a.category FROM t
 *   < array(
 *       c1 => array( a1, a2... )
 *       c2 => array( a1, a3, a5... )
 *       ...
 *     )
 */
class GroupobjHydrator extends ObjectHydrator
{

	/**
	 * Hydrates all rows from the current statement instance at once.
	 *
	 * @return mixed[]
	 */
	protected function hydrateAllData(): array
	{
		$result = array();
		
		$group_index = null;
		foreach (parent::hydrateAllData() as $row) {
			
			// la 1ère colonne ne contenant pas un objet sera utilisée comme groupe
			if ($group_index === null) foreach ($row as $index => $value) {
				if (! \is_object($value)) { $group_index = $index; break; }
			}
			
			// initialisation du groupe dans les résultats
			$group = $row[$group_index];
			if ($group === null || $group === '') $group = "default";
			if (! isset($result[$group])) $result[$group] = array();
			
			// la 1ère colonne contenant un objet sera ajoutée au groupe
			foreach ($row as $index => $value) {
				if ($index !== $group_index) { $result[$group][] = $value; break; }
			}
		}
		
		return $result;
	}

}