201 lines
4.8 KiB
PHP
201 lines
4.8 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace \manager\ORM;
|
||
|
|
||
|
|
||
|
class Rows{
|
||
|
|
||
|
/* Attributs */
|
||
|
private $where; // Tableau associatif contenant les conditions
|
||
|
private $schema; // Tableau contenant les informations associées aux données
|
||
|
|
||
|
|
||
|
/* CONSTRUCTEUR
|
||
|
*
|
||
|
* @schema<Array> Tableau contenant les informations de la requête
|
||
|
*
|
||
|
*/
|
||
|
public function __construct($schema){
|
||
|
/* (2) On récupère les informations */
|
||
|
$this->schema = $schema;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/* RETOURNE LES ENTREES D'UNE TABLE AVEC LA CLE PRIMAIRE SPECIFIEE
|
||
|
*
|
||
|
* @primary<mixed> Clé primaire simple
|
||
|
* OU
|
||
|
* @primary<Array> Clé primaire composée
|
||
|
*
|
||
|
* @return Rows<Rows> Tableau contenant toutes les entrées de la table
|
||
|
*
|
||
|
*/
|
||
|
public function getById($primary){
|
||
|
/* [1] On récupère les clés primaires
|
||
|
=========================================================*/
|
||
|
$keys = [];
|
||
|
|
||
|
foreach($this->schema['columns'] as $k=>$v)
|
||
|
$keys[] = $k;
|
||
|
|
||
|
|
||
|
/* [2] Si clé simple
|
||
|
=========================================================*/
|
||
|
if( count($keys) == 1 ){
|
||
|
|
||
|
/* (1) Si type INT et pas numérique */
|
||
|
if( $this->schema['columns'][$keys]['type'] == 'int' && !is_numeric($primary[0]) )
|
||
|
return $this;
|
||
|
|
||
|
/* (2) Si type STRING et pas string */
|
||
|
if( $this->schema['columns'][$keys]['type'] == 'text' && !is_string($primary[0]) )
|
||
|
return $this;
|
||
|
|
||
|
/* (3) Si type OK, on enregistre la condition */
|
||
|
$this->where[$keys[0]] = $primary[0];
|
||
|
|
||
|
|
||
|
/* [3] Si clé composée
|
||
|
=========================================================*/
|
||
|
}else{
|
||
|
|
||
|
$defaultWhere = $this->where;
|
||
|
|
||
|
/* (1) Pour chaque clé, On vérifie les TYPES */
|
||
|
foreach($key as $i=>$key){
|
||
|
|
||
|
/* (2) Si type INT et pas numérique */
|
||
|
if( $this->schema['columns'][$key]['type'] == 'int' && !is_numeric($primary[$i]) ){
|
||
|
$this->where = $defaultWhere; // On réinitialise les données si au moins 1 clé est fausse
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/* (3) Si type STRING et pas string */
|
||
|
if( $this->schema['columns'][$key]['type'] == 'text' && !is_string($primary[$i]) ){
|
||
|
$this->where = $defaultWhere; // On réinitialise les données si au moins 1 clé est fausse
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/* (3) Si type OK, on enregistre la condition */
|
||
|
$this->where[$key] = $primary[$i];
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
/* [4] On renvoie l'object courant
|
||
|
=========================================================*/
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/* GETTERS DYNAMIQUES
|
||
|
*
|
||
|
* @method<String> Nom de la méthode
|
||
|
* @parameters<Array> Tableau contenant les paramètres
|
||
|
*
|
||
|
* @return this<Rows> Retourne l'object courant
|
||
|
*
|
||
|
*/
|
||
|
public function __call($m, $a){
|
||
|
/* [0] On vérifie que la requête est du type 'getBy{Attribute}'
|
||
|
=========================================================*/
|
||
|
if( !preg_match('/^getBy(.+)$/', $m, $regex) ) // si requête incorrecte, on ne fais rien
|
||
|
return $this;
|
||
|
|
||
|
|
||
|
/* [1] On récupère le nom de la colonne
|
||
|
=========================================================*/
|
||
|
$column_name = '';
|
||
|
|
||
|
/* (1) formatte la requête 'MyAttribute' -> 'my_attribute' */
|
||
|
for( $l = 0 ; $l < strlen($regex[1]) ; $l++ ){
|
||
|
$letter = $regex[1][$l];
|
||
|
|
||
|
// Si la lettre est en majuscule mais que c'est pas la première
|
||
|
if( strtoupper($letter) == $letter && $l > 0 )
|
||
|
$column_name .= '_';
|
||
|
|
||
|
$column_name .= strtolower($letter);
|
||
|
}
|
||
|
|
||
|
/* (2) On vérifie que la colonne existe */
|
||
|
if( !array_key_exists($column_name, $this->schema['columns']) )
|
||
|
return $this; // si n'existe pas, on ne fait rien
|
||
|
|
||
|
|
||
|
/* [2] On vérifie le type du paramètre
|
||
|
=========================================================*/
|
||
|
|
||
|
/* (1) Si aucun param, on quitte */
|
||
|
if( count($a) == 0 )
|
||
|
return $this;
|
||
|
|
||
|
/* (2) Si type INT et pas numérique */
|
||
|
if( $this->schema['columns'][$column_name]['type'] == 'int' && !is_numeric($a[0]) )
|
||
|
return $this;
|
||
|
|
||
|
/* (3) Si type STRING et pas string */
|
||
|
if( $this->schema['columns'][$column_name]['type'] == 'text' && !is_string($a[0]) )
|
||
|
return $this;
|
||
|
|
||
|
/* (4) Si type OK, on enregistre la condition */
|
||
|
$this->where[$keys[0]] = $a[0];
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/* RETOURNE 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)
|
||
|
*
|
||
|
*/
|
||
|
public function select($fields){
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/* 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(){}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
?>
|