Gestion des alias dans `orm/Rows` + Gestion de la reconnaissance des types des champs à partir du "vrai" champ concerné (fonctionne aussi avec les fonctions d'aggrégation)
This commit is contained in:
parent
2ed990fe70
commit
fd970b7de6
|
@ -248,11 +248,12 @@
|
|||
* @field<String> Libellé du champ à afficher
|
||||
* @func<CONST> Fonction d'aggrégation (ou NULL)
|
||||
* @distinct<Boolean> Clause DISTINCT
|
||||
* @alias<String> Alias du champ
|
||||
*
|
||||
* @return this<Rows> Retourne l'object courant
|
||||
*
|
||||
*/
|
||||
public function select($field=null, $func=null, $distinct=false){
|
||||
public function select($field=null, $func=null, $distinct=false, $alias=null){
|
||||
/* [1] On formatte les champs
|
||||
=========================================================*/
|
||||
/* (1) On vérifie le type de @field */
|
||||
|
@ -273,6 +274,9 @@
|
|||
/* (4) On met la valeur par défaut à @distinct si type mauvais */
|
||||
$distinct = !is_bool($distinct) ? false : $distinct;
|
||||
|
||||
/* (5) Si @alias incorrect, on met @field par défaut */
|
||||
if( !is_string($alias) )
|
||||
$alias = $field;
|
||||
|
||||
/* [2] On enregistre le champ
|
||||
=========================================================*/
|
||||
|
@ -281,13 +285,13 @@
|
|||
|
||||
foreach($this->schema['columns'] as $f=>$c)
|
||||
if( !isset($this->select[$f]) )
|
||||
$this->select[$f] = [$func, $distinct];
|
||||
$this->select[$f] = [$func, $distinct, $alias];
|
||||
|
||||
/* (2) Si aucun SELECT pour ce champ, on le crée */
|
||||
}else{
|
||||
|
||||
if( !isset($this->select[$field]) )
|
||||
$this->select[$field] = [$func, $distinct];
|
||||
$this->select[$field] = [$func, $distinct, $alias];
|
||||
}
|
||||
|
||||
|
||||
|
@ -1002,32 +1006,45 @@
|
|||
if( !$twoDimensions )
|
||||
$formatted = [$formatted];
|
||||
|
||||
/* (2) On retire les indices numériques */
|
||||
|
||||
/* (2) On récupère les noms des champs à partir des select (alias) */
|
||||
// {1} On récupère les colonnes locales //
|
||||
$existingColumns = $this->schema['columns'];
|
||||
$existingColumns = [];
|
||||
|
||||
foreach($this->select as $field=>$data)
|
||||
$existingColumns[$data[2]] = $this->schema['columns'][$field];
|
||||
|
||||
|
||||
// {2} On ajoute les colonnes des jointures //
|
||||
foreach($this->joined as $j)
|
||||
$existingColumns = array_merge( $existingColumns, $j['object']->schema['columns'] );
|
||||
foreach($j['object']->select as $field=>$data)
|
||||
$existingColumns[$data[2]] = $j['object']->schema['columns'][$field];
|
||||
|
||||
|
||||
// {3} On vérifie chaque clé, si c'est une colonne qui existe //
|
||||
foreach($formatted as $i=>$entry)
|
||||
|
||||
// Pour chaque champ
|
||||
foreach($entry as $index=>$value)
|
||||
foreach($entry as $index=>$value){
|
||||
|
||||
// Si la colonne existe on applique le type
|
||||
if( isset($existingColumns[$index]) ){
|
||||
|
||||
if( $existingColumns[$index]['type'] == 'int' )
|
||||
$formatted[$i][$index] = intval( $value );
|
||||
else if( $existingColumns[$index]['type'] == 'float' )
|
||||
elseif( $existingColumns[$index]['type'] == 'float' )
|
||||
$formatted[$i][$index] = floatval( $value );
|
||||
// String utf8 management
|
||||
elseif( \mb_detect_encoding($value) === 'UTF-8' )
|
||||
$formatted[$i][$index] = utf8_encode($value);
|
||||
else
|
||||
$formatted[$i][$index] = utf8_encode(utf8_decode($value));
|
||||
|
||||
// Si pas non plus une aggrégation et si indice numérique, on le retire
|
||||
}else if( !preg_match('/^agg_.+/', $index) && is_numeric($index) )
|
||||
unset($formatted[$i][$index]);
|
||||
|
||||
}
|
||||
|
||||
/* (3) On remet 1 dimension si 1 dimension à la base */
|
||||
if( !$twoDimensions )
|
||||
|
|
|
@ -21,11 +21,6 @@
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* CONSTRUIT LA REQUETE FORMATTEE "ORDER BY" AVEC UNE LISTE DE CHAMPS
|
||||
*
|
||||
* @tables<Array> Liste de champs : [table => fields]
|
||||
|
@ -37,12 +32,6 @@
|
|||
return $tables;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* CONSTRUIT LA REQUETE FORMATTEE "GROUP BY" AVEC UNE LISTE DE CHAMPS
|
||||
*
|
||||
* @tables<Array> Liste de champs : [table => fields]
|
||||
|
@ -55,10 +44,6 @@
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* CONSTRUIT LA REQUETE FORMATTEE "FROM" AVEC UNE LISTE DE TABLES
|
||||
*
|
||||
* @tables<Array> Liste de tables OU SQL PUR
|
||||
|
@ -71,10 +56,6 @@
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* CONSTRUIT LA REQUETE FORMATTEE "UPDATE" AVEC LA TABLE EN QUESTION
|
||||
*
|
||||
* @table<String> Table en question
|
||||
|
@ -87,10 +68,6 @@
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* CONSTRUIT LA REQUETE FORMATTEE "DELETE" AVEC LA TABLE EN QUESTION
|
||||
*
|
||||
* @table<String> Table en question
|
||||
|
@ -103,10 +80,6 @@
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* CONSTRUIT LA REQUETE TEXTUELLE "IN" AVEC UNE LISTE DE TABLES
|
||||
*
|
||||
* @field<Array> Tableau contenant [table, field]
|
||||
|
@ -140,13 +113,7 @@
|
|||
}
|
||||
|
||||
return $sql.")";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* CONSTRUIT LA REQUETE TEXTUELLE "WHERE" AVEC UNE LISTE DE TABLES
|
||||
} /* CONSTRUIT LA REQUETE TEXTUELLE "WHERE" AVEC UNE LISTE DE TABLES
|
||||
*
|
||||
* @field<Array> Tableau contenant [table, field]
|
||||
* @valeur<Array> Valeurs de la clause WHERE [valeur, opérateur]
|
||||
|
@ -177,13 +144,7 @@
|
|||
|
||||
|
||||
return $sql;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* CONSTRUIT LA REQUETE FORMATTEE "SET" AVEC UNE LISTE DE TABLES
|
||||
} /* CONSTRUIT LA REQUETE FORMATTEE "SET" AVEC UNE LISTE DE TABLES
|
||||
*
|
||||
* @values<Array> Tableau de la forme [ field=>value, field2=>value2 ]
|
||||
* @bound<Arary> Tableau associatif contenant les variables "bindés" -> ajout des champs
|
||||
|
@ -213,13 +174,7 @@
|
|||
}
|
||||
|
||||
return $sql;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* CONSTRUIT LA REQUETE FORMATTEE "LIMIT" AVEC UN NOMBRE D'ENTREES
|
||||
} /* CONSTRUIT LA REQUETE FORMATTEE "LIMIT" AVEC UN NOMBRE D'ENTREES
|
||||
*
|
||||
* @count<int> Nombre limite
|
||||
*
|
||||
|
@ -240,18 +195,6 @@
|
|||
return $sql;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* CONSTRUIT LA REQUETE A PARTIR D'UNE REQUETTE FORMATTEE
|
||||
*
|
||||
* @request<Arary> Requête formattée
|
||||
|
@ -275,7 +218,7 @@
|
|||
case 'SELECT':
|
||||
$sql .= "SELECT ";
|
||||
$c = 0;
|
||||
foreach($statements as $table=>$fields)
|
||||
foreach($statements as $table=>$fields){
|
||||
foreach($fields as $field=>$select){
|
||||
|
||||
/* (1) On construit le nom du champ */
|
||||
|
@ -291,7 +234,11 @@
|
|||
|
||||
|
||||
/* (4) On ajoute l'alias */
|
||||
if( isset($select[0]) && !is_null($select[0]) )
|
||||
// si défini
|
||||
if( isset($select[2]) )
|
||||
$fieldStr = "$fieldStr as ".$select[2];
|
||||
// si func et non défini
|
||||
elseif( isset($select[0]) && !is_null($select[0]) )
|
||||
$fieldStr = "$fieldStr as agg_$field";
|
||||
else
|
||||
$fieldStr = "$fieldStr";
|
||||
|
@ -300,6 +247,7 @@
|
|||
|
||||
$c++;
|
||||
}
|
||||
}
|
||||
|
||||
$sql .= "\n";
|
||||
break;
|
||||
|
@ -409,12 +357,6 @@
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* [2] On retourne le résultat
|
||||
=========================================================*/
|
||||
return $sql;
|
||||
|
|
Loading…
Reference in New Issue