Key Value Storage

Cette fonction retourne des enregistrements stockés dans une table clé=>valeur

Il est parfois très utile d'utiliser un stockage de données dans une table clé valeur .

Prenons par exemple les structure de tables suivante :


CREATE TABLE IF NOT EXISTS `gen_object` (
  `id_object` mediumint(8) NOT NULL AUTO_INCREMENT,
  `lat` float DEFAULT NULL,
  `lon` float DEFAULT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id_object`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Structure de la table `gen_object_data`
--

CREATE TABLE IF NOT EXISTS `gen_object_data` (
  `id_object_data` mediumint(8) NOT NULL AUTO_INCREMENT,
  `id_object` mediumint(8) NOT NULL,
  `title` varchar(255) NOT NULL,
  `value` varchar(255) NOT NULL,
  PRIMARY KEY (`id_object_data`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Le but ici est de stocker une nombre de propriété N pour chaque object. Comme le nombre de propriété n'est pas figé, nous ne pouvons pas passer par une structure classique. Chaque object peut avoir des propriétés différentes. C'est là que le KeyValueStorage est très utile.

Chaque module étendu de la Genclass peut utiliser ce "moteur" de stockage de la façon suivante ;


$KVS_Properties = array (
    'primary_key'          => 'id_object'
   ,'parent_tablename'     => 'gen_object'
   ,'child_tablename'      => 'gen_object_data'
   ,'child_keyfield'       => 'title'
   ,'child_valuefield'     => 'value'
   ,'keys'                 => array(
        'departure'
        ,'cabinet'
        ,'features'
        ,'id'
        ,'mark'
        ,'model'
        ,'permanent'
        ,'power'
        ,'sati'
        ,'standard'
        ,'type'
        ,'pictogram'
        ,'status'
        ,'building'
        ,'floor'
        ,'lamp_power'
        ,'lamp_type'
        ,'tension'
   )
);

print_r( $this->collector['object_data']->getKeyValueStore((int)$_GET['id_object'],$KVS_Properties) );

Et voici le résultat pour un object :


Array
(
    [0] => Array
        (
            [id_object] => 50
            [lat] => 45.0621
            [lon] => 4.2211
            [hash] => 804d5700-1abc-4382-9c0d-08b68143ef86-16bbc01qaff
            [created_at] => 2019-07-04 11:20:29
            [updated_at] => 2019-07-04 11:20:29
            [departure] => 23
            [cabinet] => ze
            [features] => 
            [id] => bs34
            [mark] => ura
            [model] => 118218
            [permanent] => false
            [power] => 34
            [sati] => true
            [standard] => false
            [type] => baes
            [pictogram] => FLÈCHE VERS LE HAUT
            [status] => active
            [building] => Lorem Ipsum
            [floor] => floor1
            [lamp_power] => 0
            [lamp_type] => led
            [tension] => 0
        )

)

Voici l'utilisation de getKeyValueStore() :


getKeyValueStore( int $primay_key )
#  =>  $primary_key contient la valeur de la clé primaire que vous recherchez, ici id_object

getKeyValueStore( array $search ) 
#  => ou $search contient les critères de recherche, par exemple : $search =  array ( 'status' => 'active', 'floot' => 'floor1') ceci peut retourner plusieurs enregistrements.

Ici toutes les clés possibles sont stockées dans


$KVS_Properties['keys']

Pour récupérer ces clés, il vous suffit de faire un :


SELECT DISTINCT('title') FROM gen_object_data