Gestion du TYPAGE + de la suppression des INDICES NUMERIQUES (et inconnus) + gestion de la récupération UNIQUE/MULTIPLE
This commit is contained in:
parent
28ee595406
commit
6a0d92ef28
|
@ -119,7 +119,7 @@
|
|||
if( !$oneDimension && isset($fetchData[0]) && is_array($fetchData[0]) ){
|
||||
|
||||
// on supprime les doublons des entrées (indice numérique)
|
||||
for( $i = 0 ; $i < count($fetchData) ; $i++ ) // pour tout les utilisateurs
|
||||
for( $i = 0 ; $i < count($fetchData) ; $i++ ) // pour toutes les lignes
|
||||
foreach($fetchData[$i] as $col => $val){ // pour toutes les entrées
|
||||
|
||||
if( !\mb_detect_encoding($val, 'UTF-8') )
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
|
||||
/* Attributs */
|
||||
public $where; // Tableau associatif contenant les conditions
|
||||
public $select; // Tableau contenant la liste des champs à afficher
|
||||
private $schema; // Tableau contenant les informations associées aux données
|
||||
|
||||
|
||||
|
@ -23,6 +24,9 @@
|
|||
|
||||
/* (2) On initialise les conditions */
|
||||
$this->where = [];
|
||||
|
||||
/* (3) On initialise les champs à retourner */
|
||||
$this->select = [];
|
||||
}
|
||||
|
||||
|
||||
|
@ -171,16 +175,15 @@
|
|||
|
||||
|
||||
|
||||
/* RETOURNE UNIQUEMENT LES CHAMPS SELECTIONNES
|
||||
/* SELECTIONNE UNIQUEMENT LES CHAMPS SELECTIONNES
|
||||
*
|
||||
* @fields<Array> Libellé du champ à afficher
|
||||
*
|
||||
* @return data<Array> Tableau contenant les champs sélectionnés
|
||||
* @return data<mixed> Valeur du champ sélectionné (si 1 seul champ)
|
||||
* @return this<Rows> Retourne l'object courant
|
||||
*
|
||||
*/
|
||||
public function select($fields=[]){
|
||||
/* [0] On formatte les champs
|
||||
/* [1] On formatte les champs
|
||||
=========================================================*/
|
||||
/* (1) On met en tableau quoi qu'il en soit */
|
||||
$fields = is_array($fields) ? $fields : [$fields];
|
||||
|
@ -194,6 +197,59 @@
|
|||
sort($fields);
|
||||
|
||||
|
||||
/* [2] On enregistre la liste des champs
|
||||
=========================================================*/
|
||||
foreach($fields as $f=>$field)
|
||||
if( !in_array($field, $this->select) ) // On ajoute si pas déja
|
||||
$this->select[] = $field;
|
||||
|
||||
|
||||
/* [3] On retourne l'object courant
|
||||
=========================================================*/
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* MODIFIE DES ENTREES
|
||||
*
|
||||
* @updates<Array> Tableau associatif contenant les nouvelles valeurs
|
||||
*
|
||||
* @return this<Rows> Retourne l'objet courant (modifié)
|
||||
*
|
||||
*/
|
||||
public function edit($updates){}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* SUPPRIME LES ENTREES
|
||||
*
|
||||
* @return status<Boolean> Retourne si TRUE ou FALSE les entrées ont bien été supprimées
|
||||
*
|
||||
*/
|
||||
public function delete(){}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* RETOURNE LES DONNEES / NULL si une erreur survient
|
||||
*
|
||||
* @unique<Boolean> VRAI si on veut un seul résultat (itérateur)
|
||||
*
|
||||
* @return data<Array> Tableau contenant les champs sélectionnés
|
||||
* @return data<mixed> Valeur du champ sélectionné (si 1 seul champ)
|
||||
*
|
||||
*/
|
||||
public function fetch($unique=false){
|
||||
|
||||
/* [1] On rédige la requête
|
||||
=========================================================*/
|
||||
|
@ -201,12 +257,12 @@
|
|||
$requestS = "SELECT ";
|
||||
|
||||
/* (2) Si aucun champ, on sélectionne tous les champs */
|
||||
if( count($fields) == 0 )
|
||||
if( count($this->select) == 0 )
|
||||
$requestS .= "* ";
|
||||
|
||||
/* (3) Sinon, on sélectionne les champs que l'on veut */
|
||||
else
|
||||
foreach($fields as $f=>$field)
|
||||
foreach($this->select as $f=>$field)
|
||||
if( $f == 0 ) $requestS .= $field;
|
||||
else $requestS .= ', '.$field;
|
||||
|
||||
|
@ -244,32 +300,96 @@
|
|||
|
||||
/* [6] On retourne le résultat
|
||||
=========================================================*/
|
||||
return Database::delNumeric( $request->fetchAll() );
|
||||
/* (1) Si unique */
|
||||
if( $unique )
|
||||
return $this->format( $request->fetch() );
|
||||
|
||||
/* (2) Si tout */
|
||||
return $this->format( $request->fetchAll() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* MODIFIE DES ENTREES
|
||||
|
||||
/* ON FORMATTE LES DONNEES DE SORTIE
|
||||
*
|
||||
* @updates<Array> Tableau associatif contenant les nouvelles valeurs
|
||||
* @data<Array> Données / Tableau de données
|
||||
*
|
||||
* @return this<Rows> Retourne l'objet courant (modifié)
|
||||
* @return formatted<Array> Données formattées / Tableau de données formatté
|
||||
*
|
||||
*/
|
||||
public function edit($updates){}
|
||||
private function format($data){
|
||||
/* [0] On initialise le processus
|
||||
=========================================================*/
|
||||
/* (0) Initialisation du retour */
|
||||
$formatted = $data;
|
||||
|
||||
/* (1) On vérifie qu'il s'agit d'un tableau (non vide) */
|
||||
if( !is_array($formatted) || count($formatted) < 1 )
|
||||
return $formatted;
|
||||
|
||||
/* (2) On regarde si c'est des données simples */
|
||||
$twoDimensions = is_array($formatted[0]);
|
||||
|
||||
/* (3) On regarde s'il s'agit d'un Tableau de données en bonne et due forme */
|
||||
if( $twoDimensions ){
|
||||
$sameKeys = true; // VRAI si chaque entrée a les mêmes clés
|
||||
$last_keys = null; // Clés de l'entrée précédente
|
||||
|
||||
foreach($formatted as $i=>$entry){
|
||||
if( !is_null($last_keys) && count(array_diff(array_keys($entry), $last_keys)) > 0 ){ // Si différent du précédent, ducoup on est pas bon
|
||||
$sameKeys = false;
|
||||
break;
|
||||
}
|
||||
|
||||
$last_keys = array_keys($entry);
|
||||
}
|
||||
|
||||
// Si pas les mêmes clés, on a une erreur
|
||||
if( !$sameKeys )
|
||||
return $formatted;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* [1] On retire les doublons à indices numériques
|
||||
=========================================================*/
|
||||
/* (1) Si 1 dimensions, on met en 2 pour traiter tout de la même manière */
|
||||
if( !$twoDimensions )
|
||||
$formatted = [$formatted];
|
||||
|
||||
/* (2) On retire les indices numériques */
|
||||
|
||||
// Pour chaque entrée
|
||||
foreach($formatted as $i=>$entry)
|
||||
|
||||
// Pour chaque champ
|
||||
foreach($entry as $index=>$value)
|
||||
|
||||
// Si dans le schéma on applique le type
|
||||
if( array_key_exists($index, $this->schema['columns']) ){
|
||||
|
||||
if( $this->schema['columns'][$index]['type'] == 'int' )
|
||||
$formatted[$i][$index] = intval( $value );
|
||||
else if( $this->schema['columns'][$index]['type'] == 'float' )
|
||||
$formatted[$i][$index] = floatval( $value );
|
||||
|
||||
}else // Si pas dans le schéma, on le retire
|
||||
unset($formatted[$i][$index]);
|
||||
|
||||
|
||||
/* SUPPRIME LES ENTREES
|
||||
*
|
||||
* @return status<Boolean> Retourne si TRUE ou FALSE les entrées ont bien été supprimées
|
||||
*
|
||||
*/
|
||||
public function delete(){}
|
||||
/* (3) On remet 1 dimension si 1 dimension à la base */
|
||||
if( !$twoDimensions )
|
||||
$formatted = $formatted[0];
|
||||
|
||||
/* [2] On retourne le résultat
|
||||
=========================================================*/
|
||||
return $formatted;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -345,7 +345,9 @@
|
|||
$userTable =
|
||||
Table::get('user')
|
||||
->getByIdWarehouse(7)
|
||||
->select(['mail', 'username', 'firstname']);
|
||||
->select(['mail', 'username', 'firstname'])
|
||||
->select('id_user')
|
||||
->fetch(true);
|
||||
|
||||
var_dump($userTable);
|
||||
|
||||
|
|
Loading…
Reference in New Issue