From 1cd1df9a26f53f4c26dd19544df7979a7aadac44 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Fri, 22 Jul 2016 23:55:18 +0200 Subject: [PATCH] =?UTF-8?q?On=20r=C3=A9cup=C3=A8re=20la=20liste=20des=20cl?= =?UTF-8?q?=C3=A9s=20=C3=A9trang=C3=A8res=20au=20niveau=20de=20\ORM\Table:?= =?UTF-8?q?:get?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/ORM/Rows.php | 34 ++++++++++++++++++++++++++++++++-- manager/ORM/Table.php | 18 +++++++++++++++++- test/automate.php | 6 +++--- 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/manager/ORM/Rows.php b/manager/ORM/Rows.php index 248aaf5..7048d05 100644 --- a/manager/ORM/Rows.php +++ b/manager/ORM/Rows.php @@ -10,7 +10,8 @@ /* 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 + public $unique; // VRAI si on attend une valeur unique + public $schema; // Tableau contenant les informations associées aux données /* CONSTRUCTEUR @@ -27,6 +28,9 @@ /* (3) On initialise les champs à retourner */ $this->select = []; + + /* (4) On initialise le caractère 'unique' du résultat */ + $this->unique = false; } @@ -215,6 +219,28 @@ + /* PERMET DE DIRE QUE L'ON VEUT UN RESULTAT UNIQUE + * + * @return this Retourne l'object courant + * + */ + public function unique(){ + /* [1] On enregistre le choix + =========================================================*/ + $this->unique = true; + + + /* [2] On retourne l'object courant + =========================================================*/ + return $this; + } + + + + + + + /* MODIFIE DES ENTREES * * @updates Tableau associatif contenant les nouvelles valeurs @@ -249,7 +275,11 @@ * @return data Valeur du champ sélectionné (si 1 seul champ) * */ - public function fetch($unique=false){ + public function fetch($unique=null){ + /* [0] Initialisation des paramètres + =========================================================*/ + $unique = !is_bool($unique) ? $this->unique : $unique; + /* [1] On rédige la requête =========================================================*/ diff --git a/manager/ORM/Table.php b/manager/ORM/Table.php index d36352d..34a697b 100644 --- a/manager/ORM/Table.php +++ b/manager/ORM/Table.php @@ -51,7 +51,7 @@ - /* [2] Si la table existe, on récupère ses données + /* [2] Si la table existe, on récupère les colonnes =========================================================*/ /* (1) On récupère les colonnes */ $getColumns = Database::getPDO()->query("SHOW columns FROM ".self::$database.'.'.$table_name); @@ -82,6 +82,22 @@ + /* [3] On récupère les clés étrangères + =========================================================*/ + /* (1) On récupère le texte du 'CREATE TABLE' */ + $getCreateTable = Database::getPDO()->query("show create table ".$table_name); + $create_table = $getCreateTable->fetch()['Create Table']; + + /* (2) On découpte en lignes */ + $create_table_lines = explode("\n", $create_table); + + /* (3) Pour chaque ligne, si c'est une contrainte, on l'enregistre dans la colonne associée */ + foreach($create_table_lines as $i=>$line) + if( preg_match('/CONSTRAINT `.+` FOREIGN KEY \(`(.+)`\) REFERENCES `(.+)` \(`(.+)`\)+/i', $line, $m) ) + $schema['columns'][$m[1]]['references'] = [$m[2], $m[3]]; + + + /* [3] On renvoie une instance de 'Rows' =========================================================*/ return new Rows($schema); diff --git a/test/automate.php b/test/automate.php index d46dfc0..93fe9d5 100755 --- a/test/automate.php +++ b/test/automate.php @@ -342,14 +342,14 @@ debug(); - $userTable = + $myUser = Table::get('user') ->getByIdWarehouse(7) ->select(['mail', 'username', 'firstname']) ->select('id_user') - ->fetch(true); + ->unique(); - var_dump($userTable); + var_dump($myUser->schema['columns']); ?>