Gestion pour l'ORM des différentes conditions '<', '<=', '>', '>=', '='
This commit is contained in:
parent
d1eb8e4b12
commit
7e9c64d516
|
@ -7,6 +7,15 @@
|
||||||
|
|
||||||
class Rows{
|
class Rows{
|
||||||
|
|
||||||
|
|
||||||
|
/* CONSTANTES */
|
||||||
|
const COND_EQUAL = '=';
|
||||||
|
const COND_INF = '<';
|
||||||
|
const COND_SUP = '>';
|
||||||
|
const COND_INFEQ = '<=';
|
||||||
|
const COND_SUPEQ = '>=';
|
||||||
|
const COND_LIKE = '>=';
|
||||||
|
|
||||||
/* Attributs */
|
/* Attributs */
|
||||||
private $where; // Tableau associatif contenant les conditions
|
private $where; // Tableau associatif contenant les conditions
|
||||||
private $select; // Tableau contenant la liste des champs à afficher
|
private $select; // Tableau contenant la liste des champs à afficher
|
||||||
|
@ -69,15 +78,23 @@
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
if( count($keys) == 1 ){
|
if( count($keys) == 1 ){
|
||||||
|
|
||||||
/* (1) Si type INT et pas numérique */
|
/* (1) Si on a juste la valeur, on ajoute le type de condition */
|
||||||
if( $this->schema['columns'][$keys[0]]['type'] == 'int' && !is_numeric($primary) )
|
if( !is_array($primary) )
|
||||||
|
$primary = [ $primary, self::COND_EQUAL ];
|
||||||
|
|
||||||
|
/* (2) Si type INT et pas numérique */
|
||||||
|
if( $this->schema['columns'][$keys[0]]['type'] == 'int' && !is_numeric($primary[0]) )
|
||||||
return $this;
|
return $this;
|
||||||
|
|
||||||
/* (2) Si type STRING et pas string */
|
/* (3) Si type FLOAT et pas numérique */
|
||||||
if( $this->schema['columns'][$keys[0]]['type'] == 'text' && !is_string($primary) )
|
if( $this->schema['columns'][$keys[0]]['type'] == 'float' && !is_numeric($primary[0]) )
|
||||||
return $this;
|
return $this;
|
||||||
|
|
||||||
/* (3) Si type OK, on enregistre la condition */
|
/* (4) Si type STRING et pas string */
|
||||||
|
if( $this->schema['columns'][$keys[0]]['type'] == 'text' && !is_string($primary[0]) )
|
||||||
|
return $this;
|
||||||
|
|
||||||
|
/* (5) Si type OK, on enregistre la condition */
|
||||||
$this->where[$keys[0]] = $primary;
|
$this->where[$keys[0]] = $primary;
|
||||||
|
|
||||||
|
|
||||||
|
@ -90,19 +107,30 @@
|
||||||
/* (1) Pour chaque clé, On vérifie les TYPES */
|
/* (1) Pour chaque clé, On vérifie les TYPES */
|
||||||
foreach($keys as $i=>$key){
|
foreach($keys as $i=>$key){
|
||||||
|
|
||||||
/* (2) Si type INT et pas numérique */
|
|
||||||
if( $this->schema['columns'][$key]['type'] == 'int' && !is_numeric($primary[$i]) ){
|
/* (2) Si c'est un paramètre seul, on ajoute par défaut self::COND_EQUAL */
|
||||||
$this->where = $defaultWhere; // On réinitialise les données si au moins 1 clé est fausse
|
if( !is_array($primary[$i]) )
|
||||||
|
$primary[$i] = [ $primary[$i], self::COND_EQUAL ];
|
||||||
|
|
||||||
|
/* (3) Si type INT et pas numérique */
|
||||||
|
if( $this->schema['columns'][$column_name]['type'] == 'int' && !is_numeric($primary[$i][0]) ){
|
||||||
|
$this->where = $defaultWhere; // On réinitialise les conditions si au moins 1 est fausse
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (3) Si type STRING et pas string */
|
/* (4) Si type FLOAT et pas numérique */
|
||||||
if( $this->schema['columns'][$key]['type'] == 'text' && !is_string($primary[$i]) ){
|
if( $this->schema['columns'][$column_name]['type'] == 'float' && !is_numeric($primary[$i][0]) ){
|
||||||
$this->where = $defaultWhere; // On réinitialise les données si au moins 1 clé est fausse
|
$this->where = $defaultWhere; // On réinitialise les conditions si au moins 1 est fausse
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (3) Si type OK, on enregistre la condition */
|
/* (5) Si type STRING et pas string */
|
||||||
|
if( $this->schema['columns'][$column_name]['type'] == 'text' && !is_string($primary[$i][0]) ){
|
||||||
|
$this->where = $defaultWhere; // On réinitialise les conditions si au moins 1 est fausse
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (6) Si type OK, on enregistre la condition */
|
||||||
$this->where[$key] = $primary[$i];
|
$this->where[$key] = $primary[$i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,7 +151,8 @@
|
||||||
/* GETTERS DYNAMIQUES
|
/* GETTERS DYNAMIQUES
|
||||||
*
|
*
|
||||||
* @method<String> Nom de la méthode
|
* @method<String> Nom de la méthode
|
||||||
* @parameters<Array> Tableau contenant les paramètres
|
* @parameter<mixed> Valeur du paramètre
|
||||||
|
* @parameter<Array> Valeur du paramètre + type de vérification (tableau)
|
||||||
*
|
*
|
||||||
* @return this<Rows> Retourne l'object courant
|
* @return this<Rows> Retourne l'object courant
|
||||||
*
|
*
|
||||||
|
@ -157,25 +186,33 @@
|
||||||
|
|
||||||
/* [2] On vérifie le type du paramètre
|
/* [2] On vérifie le type du paramètre
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
|
|
||||||
/* (1) Si aucun param, on quitte */
|
/* (1) Si aucun param, on quitte */
|
||||||
if( count($a) == 0 )
|
if( count($a) == 0 )
|
||||||
return $this;
|
return $this;
|
||||||
|
|
||||||
/* (2) Si type INT et pas numérique */
|
/* (2) Si c'est un paramètre seul, on ajoute par défaut self::COND_EQUAL */
|
||||||
if( $this->schema['columns'][$column_name]['type'] == 'int' && !is_numeric($a[0]) )
|
if( !is_array($a[0]) )
|
||||||
|
$a[0] = [ $a[0], self::COND_EQUAL ];
|
||||||
|
|
||||||
|
/* (3) Si type INT et pas numérique */
|
||||||
|
if( $this->schema['columns'][$column_name]['type'] == 'int' && !is_numeric($a[0][0]) )
|
||||||
return $this;
|
return $this;
|
||||||
|
|
||||||
/* (3) Si type STRING et pas string */
|
/* (4) Si type FLOAT et pas numérique */
|
||||||
if( $this->schema['columns'][$column_name]['type'] == 'text' && !is_string($a[0]) )
|
if( $this->schema['columns'][$column_name]['type'] == 'float' && !is_numeric($a[0][0]) )
|
||||||
return $this;
|
return $this;
|
||||||
|
|
||||||
|
/* (5) Si type STRING et pas string */
|
||||||
|
if( $this->schema['columns'][$column_name]['type'] == 'text' && !is_string($a[0][0]) )
|
||||||
|
return $this;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* [3] Si type OK, on enregistre la condition
|
/* [3] Si type OK, on enregistre la condition
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$this->where[$column_name] = $a[0];
|
$this->where[$column_name] = $a[0];
|
||||||
|
|
||||||
|
// On retourne l'object courant
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -384,8 +421,8 @@
|
||||||
/* (1) On met les conditions locales */
|
/* (1) On met les conditions locales */
|
||||||
$c = 0;
|
$c = 0;
|
||||||
foreach($this->where as $field=>$value){
|
foreach($this->where as $field=>$value){
|
||||||
if( $c == 0 ) $requestS .= 'WHERE '.$this->schema['table'].'.'.$field.' = :'.$this->schema['table'].'_x_'.$field."\n";
|
if( $c == 0 ) $requestS .= 'WHERE '.$this->schema['table'].'.'.$field.' '.$value[1].' :'.$this->schema['table'].'_x_'.$field."\n";
|
||||||
else $requestS .= 'AND '.$this->schema['table'].'.'.$field.' = :'.$this->schema['table'].'_x_'.$field."\n";
|
else $requestS .= 'AND '.$this->schema['table'].'.'.$field.' '.$value[1].' :'.$this->schema['table'].'_x_'.$field."\n";
|
||||||
|
|
||||||
$c++;
|
$c++;
|
||||||
}
|
}
|
||||||
|
@ -400,8 +437,8 @@
|
||||||
/* (3) On ajoute les conditions des jointures */
|
/* (3) On ajoute les conditions des jointures */
|
||||||
foreach($this->joined as $rows)
|
foreach($this->joined as $rows)
|
||||||
foreach($rows->where as $field=>$value){
|
foreach($rows->where as $field=>$value){
|
||||||
if( $c == 0 ) $requestS .= 'WHERE '.$rows->schema['table'].'.'.$field.' = :'.$rows->schema['table'].'_x_'.$field."\n";
|
if( $c == 0 ) $requestS .= 'WHERE '.$rows->schema['table'].'.'.$field.' '.$value[1].' :'.$rows->schema['table'].'_x_'.$field."\n";
|
||||||
else $requestS .= 'AND '.$rows->schema['table'].'.'.$field.' = :'.$rows->schema['table'].'_x_'.$field."\n";
|
else $requestS .= 'AND '.$rows->schema['table'].'.'.$field.' '.$value[1].' :'.$rows->schema['table'].'_x_'.$field."\n";
|
||||||
|
|
||||||
$c++;
|
$c++;
|
||||||
}
|
}
|
||||||
|
@ -415,17 +452,19 @@
|
||||||
|
|
||||||
/* (1) On bind tous les paramètres locaux */
|
/* (1) On bind tous les paramètres locaux */
|
||||||
foreach($this->where as $field=>$value)
|
foreach($this->where as $field=>$value)
|
||||||
$binded[':'.$this->schema['table'].'_x_'.$field] = $value;
|
$binded[':'.$this->schema['table'].'_x_'.$field] = $value[0];
|
||||||
|
|
||||||
/* (3) On bind tous les paramètres des jointures */
|
/* (3) On bind tous les paramètres des jointures */
|
||||||
foreach($this->joined as $rows)
|
foreach($this->joined as $rows)
|
||||||
foreach($rows->where as $field=>$value)
|
foreach($rows->where as $field=>$value)
|
||||||
$binded[':'.$rows->schema['table'].'_x_'.$field] = $value;
|
$binded[':'.$rows->schema['table'].'_x_'.$field] = $value[0];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* [6] On exécute la requête et retourne le résultat
|
/* [6] On exécute la requête et retourne le résultat
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
|
var_dump($requestS);
|
||||||
|
var_dump($binded);
|
||||||
/* (1) On exécute la requête */
|
/* (1) On exécute la requête */
|
||||||
$request->execute($binded);
|
$request->execute($binded);
|
||||||
|
|
||||||
|
|
|
@ -342,17 +342,20 @@
|
||||||
|
|
||||||
debug();
|
debug();
|
||||||
|
|
||||||
$warehouse = Table::get('warehouse')->getByName('stef-montauban');
|
$warehouse =
|
||||||
|
Table::get('warehouse') // Access to table 'warehouse'
|
||||||
|
->getByName('stef-montauban'); // condition : name = 'my-warehouse'
|
||||||
|
|
||||||
$myUser =
|
$myUser =
|
||||||
Table::get('user')
|
Table::get('user') // Access to table 'user'
|
||||||
->getById(3) // PRIMARY KEY (if composed, all arguments in array)
|
->getById([3, Rows::COND_SUP]) // PRIMARY KEY (if composed, all arguments in array)
|
||||||
->getByUsername('gediaz') // Dynamic getter 'getByMySuperColumn' -> 'my_super_column'
|
// ->getById([10, Rows::COND_INF]) // PRIMARY KEY (if composed, all arguments in array)
|
||||||
->select(['mail', 'username', 'firstname'])
|
// ->getByUsername('gediaz') // Dynamic getter 'getByMySuperColumn' -> 'my_super_column'
|
||||||
->select('id_user')
|
->select(['mail', 'username', 'firstname']) // Select clause
|
||||||
->unique()
|
->select('id_user') // Select clause (added)
|
||||||
->join('id_warehouse', $warehouse)
|
->join('id_warehouse', $warehouse) // joins warehouse (with name 'my-warehouse') to column 'id_warehouse'
|
||||||
->fetch();
|
// ->unique() // unique result
|
||||||
|
->fetch(); // Result
|
||||||
|
|
||||||
|
|
||||||
var_dump($myUser);
|
var_dump($myUser);
|
||||||
|
|
Loading…
Reference in New Issue