Exemplo n.º 1
0
 /**
  * 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));
 }