NxTIC/manager/repo/parentRepo.php

77 lines
2.5 KiB
PHP

<?php
namespace manager\repo;
use \manager\Database;
class parentRepo{
// mise à jour du nom de la table (pour les enfants)
protected static function table_name(){ static $table_name = null; return $table_name; }
/* GESTION DES GETTERS dynamiques
*
* @method<String> Nom du getter du type 'getAll' ou 'getX' avec 'X' une colonne de la table en question
* @args<Array> Liste des arguments, $args[0] est la valeur du getter (sauf pour 'getAll')
*
* @return lines<Array> Retourne le résultat du fetchAll()
*
*/
public static function __callStatic($method, $args){
// Si static::table_name() NULL
if( is_null(static::table_name()) ) return false;
/* [0] On charge la liste des colonnes de la table
=========================================================*/
$getColumns = Database::getPDO()->query('SHOW COLUMNS FROM '.static::table_name());
$cols = $getColumns->fetchAll();
$table_columns = array();
// On ajoute la liste des colonnes
foreach($cols as $column)
array_push($table_columns, $column['Field']);
/* [1] On vérifie que la méthode est 'getX', avec X une chaine
=========================================================*/
// Si c'est pas le bon format, on retourne une erreur
if( !preg_match('/^getBy(\w+)$/', $method, $matches) ) return false;
/* [2] On vérifie que la valeur après 'get' est dans $table_columns
=========================================================*/
$columnName = strtolower($matches[1]);
$getAll = $columnName == 'all'; // Si 'getAll'
$getSomething = count($args) > 0 && in_array($columnName, $table_columns); // Si 'getX', et 'X' dans la liste des colonnes
// Si ni 'getAll' ni 'getSomething' -> erreur
if( !$getAll && !$getSomething ) return false;
/* [3] On rédige la requête
=========================================================*/
$getRequestString = 'SELECT * FROM '.static::table_name();
// Si c'est 'getSomething', on ajoute une condition
if( $getSomething ) $getRequestString .= ' WHERE '.$columnName.' = :value';
$getRequest = Database::getPDO()->prepare($getRequestString);
/* [4] On exécute la requête
=========================================================*/
// Si 'getSomething', on ajoute le champ
$getRequest->execute(array(
':value' => $getSomething ? $args[0] : null
));
/* [5] On récupère le résultat
=========================================================*/
return Database::delNumeric( $getRequest->fetchAll() );
}
}
?>