/** * Methode qui permet de récupérer les entitées d'une classe métier par JOIN * @param type $id * @param type $join_class * @param type $curent_class * @return type * @throws Exception */ public static function getMany($task = null, $extra = null) { // définitioon de la classe courante if (get_called_class() == 'AbstractModel') { if ($task == null) { Core::dieError('Aucune association présente dans AbstractModel'); } if (!is_array($task) && is_string($task)) { $task = array($task); } self::$curent_class = array_shift($task); } else { self::$curent_class = get_called_class(); } // re-définition de $task si not array if (!is_array($task) && $task !== null) { $task = array($task => null); } else { if ($task !== null) { foreach ($task as $i => $e) { if (is_int($i)) { unset($task[$i]); $task[$e] = null; } } } } // préparation des elements $clausesWhere = array(); $requires = array(self::$curent_class); if ($task !== null) { foreach ($task as $key => $value) { $requires[] = $key; if ($value != null) { $clausesWhere[$key] = $value; } } } // définition des dépendences RequiredJoin issus de getConfig foreach ($requires as $class) { $requires = array_merge($requires, self::gerenateJoinRequires($class)); } $requires = self::gerenateAssosRequires(array_unique($requires)); //retourne une erreur si il n'y a pas de jointure if (count($requires) == 0) { Core::dieError('getManyBy Erreur : Association Manquante.'); } //définition des assotiations Join d'apres les dépendences dans getConfig $assos = array(); foreach (self::combine($requires) as $e) { if (($tmp = self::assosClass($e)) !== false) { $assos[] = $tmp; } } // message d'erreur si le nommbre d''association ne correspond pas au resultat attendus if (count($assos) < count($requires) - 1) { Core::dieError('getManyBy Erreur : les correspondances sont erronées ou manquantes.'); } $build = array(); // création du select $build[] = self::gerenateSelect(self::$curent_class); // ajout des Joins foreach ($assos as $t) { $build[] = self::assosBuild($t[0], $t[1]); } // création des clauses WHERE $build[] = self::generateWhere($clausesWhere); // clause ORDER - GROUP BY & LIMIT $extra = self::castExtra(self::$curent_class, $extra); if ($extra != null) { $build[] = self::extraToSql($extra); } Core::debug(implode('<br/>', $build)); return Core::$pdo->__query(self::$curent_class, implode(' ', $build)); }