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]) ){
|
if( !$oneDimension && isset($fetchData[0]) && is_array($fetchData[0]) ){
|
||||||
|
|
||||||
// on supprime les doublons des entrées (indice numérique)
|
// 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
|
foreach($fetchData[$i] as $col => $val){ // pour toutes les entrées
|
||||||
|
|
||||||
if( !\mb_detect_encoding($val, 'UTF-8') )
|
if( !\mb_detect_encoding($val, 'UTF-8') )
|
||||||
|
|
|
@ -8,8 +8,9 @@
|
||||||
class Rows{
|
class Rows{
|
||||||
|
|
||||||
/* Attributs */
|
/* Attributs */
|
||||||
public $where; // Tableau associatif contenant les conditions
|
public $where; // Tableau associatif contenant les conditions
|
||||||
private $schema; // Tableau contenant les informations associées aux données
|
public $select; // Tableau contenant la liste des champs à afficher
|
||||||
|
private $schema; // Tableau contenant les informations associées aux données
|
||||||
|
|
||||||
|
|
||||||
/* CONSTRUCTEUR
|
/* CONSTRUCTEUR
|
||||||
|
@ -23,6 +24,9 @@
|
||||||
|
|
||||||
/* (2) On initialise les conditions */
|
/* (2) On initialise les conditions */
|
||||||
$this->where = [];
|
$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
|
* @fields<Array> Libellé du champ à afficher
|
||||||
*
|
*
|
||||||
* @return data<Array> Tableau contenant les champs sélectionnés
|
* @return this<Rows> Retourne l'object courant
|
||||||
* @return data<mixed> Valeur du champ sélectionné (si 1 seul champ)
|
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function select($fields=[]){
|
public function select($fields=[]){
|
||||||
/* [0] On formatte les champs
|
/* [1] On formatte les champs
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) On met en tableau quoi qu'il en soit */
|
/* (1) On met en tableau quoi qu'il en soit */
|
||||||
$fields = is_array($fields) ? $fields : [$fields];
|
$fields = is_array($fields) ? $fields : [$fields];
|
||||||
|
@ -194,6 +197,59 @@
|
||||||
sort($fields);
|
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
|
/* [1] On rédige la requête
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
|
@ -201,12 +257,12 @@
|
||||||
$requestS = "SELECT ";
|
$requestS = "SELECT ";
|
||||||
|
|
||||||
/* (2) Si aucun champ, on sélectionne tous les champs */
|
/* (2) Si aucun champ, on sélectionne tous les champs */
|
||||||
if( count($fields) == 0 )
|
if( count($this->select) == 0 )
|
||||||
$requestS .= "* ";
|
$requestS .= "* ";
|
||||||
|
|
||||||
/* (3) Sinon, on sélectionne les champs que l'on veut */
|
/* (3) Sinon, on sélectionne les champs que l'on veut */
|
||||||
else
|
else
|
||||||
foreach($fields as $f=>$field)
|
foreach($this->select as $f=>$field)
|
||||||
if( $f == 0 ) $requestS .= $field;
|
if( $f == 0 ) $requestS .= $field;
|
||||||
else $requestS .= ', '.$field;
|
else $requestS .= ', '.$field;
|
||||||
|
|
||||||
|
@ -244,32 +300,96 @@
|
||||||
|
|
||||||
/* [6] On retourne le résultat
|
/* [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
|
/* (3) On remet 1 dimension si 1 dimension à la base */
|
||||||
*
|
if( !$twoDimensions )
|
||||||
* @return status<Boolean> Retourne si TRUE ou FALSE les entrées ont bien été supprimées
|
$formatted = $formatted[0];
|
||||||
*
|
|
||||||
*/
|
/* [2] On retourne le résultat
|
||||||
public function delete(){}
|
=========================================================*/
|
||||||
|
return $formatted;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -345,7 +345,9 @@
|
||||||
$userTable =
|
$userTable =
|
||||||
Table::get('user')
|
Table::get('user')
|
||||||
->getByIdWarehouse(7)
|
->getByIdWarehouse(7)
|
||||||
->select(['mail', 'username', 'firstname']);
|
->select(['mail', 'username', 'firstname'])
|
||||||
|
->select('id_user')
|
||||||
|
->fetch(true);
|
||||||
|
|
||||||
var_dump($userTable);
|
var_dump($userTable);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue