Nous contacter

Documentation magento / mysql

PARLER DE MON PROJET
base de données

Dans cet article je vais vous présenter les méthodes de base pour mettre à jour votre base de données MySQL via les scripts d'installation Magento. Cette documentation, bien que sommaire vous permettra déjà je l'espère d'avancer dans vos projets. 

Cet article se base simplement sur une vulgarisation de deux fichiers sources de librairie Varien ayant trait à la classe Varien_Db_Ddl_Table.

"lib/Varien/Db/Ddl/Table.php"

"lib/Varien/Db/Adapter/Pdo/Mysql.php" 

IMPORTANT: On sous estime bien souvent l'intérêt de spécifier le nom de la table en mysql, ou d'utiliser les classe varien pour la gestion de la base de données, mais le gros avantage par rapport à du SQL pure est l'évolutivité au fur et à mesure des versions, ainsi si varien (editeur de magento) ou vous changez un nom de table en xml, vos scripts s’exécuteront toujours comme il faut. Il est en effet souvent préférable de privilégier l'évolutivité à la livraison rapide de code statique.

Documentation

Format des scripts de setup (rappel)

Les noms de fichiers peuvent prendre depuis la version 1.6 deux formats,

  • à l'installation : install-0.0.1.php (avec numéro de première version 0.0.1)
  • à l'update : upgrade-0.0.1-0.0.4.php (pour un passage de version 0.0.1 à 0.0.4)

Ils commencent généralement par :

$installer = $this;
$installer->startSetup();

et se terminent par:

$installer->endSetup();

Les types de champs mysql

Quand vous déclarez une colonne vous allez déclarer son type sont une forme proche de : Varien_Db_Ddl_Table::TYPE_TEXT, voici une liste des types utilisés par magento:

<?php
class Varien_Db_Ddl_Table
{
const TYPE_BOOLEAN = 'boolean';
const TYPE_SMALLINT = 'smallint';
const TYPE_INTEGER = 'integer';
const TYPE_BIGINT = 'bigint';
const TYPE_FLOAT = 'float';
const TYPE_NUMERIC = 'numeric';
const TYPE_DECIMAL = 'decimal';
const TYPE_DATE = 'date';
const TYPE_TIMESTAMP = 'timestamp'; //Possibilité de gérer les date-time depuis 1970, et les trigger automatique de plusieurs systeme de gestion de base de données relationels
const TYPE_DATETIME = 'datetime'; //Pour gerer les dates au format long avant 1970.
const TYPE_TEXT = 'text';
const TYPE_BLOB = 'blob'; // pour assurer la rétro compatibilité quand la requete ne gère pas l'optipon statement.
const TYPE_VARBINARY = 'varbinary';

Certains types ne sont plus supportés (deprecated) et donc retransformés en interne par Magento, les voici :

Converti en: TYPE_SMALLINT

const TYPE_TINYINT = 'tinyint';

Converti en: TYPE_TEXT

const TYPE_CHAR = 'char';
const TYPE_VARCHAR = 'varchar';
const TYPE_LONGVARCHAR = 'longvarchar';
const TYPE_CLOB = 'cblob';

Converti en: TYPE_FLOAT

const TYPE_DOUBLE = 'double';
const TYPE_REAL = 'real';

Converti en: TYPE_TIMESTAMP

const TYPE_TIME = 'time';

Converti en: TYPE_BLOB

const TYPE_BINARY = 'binary';
const TYPE_LONGVARBINARY = 'longvarbinary';

A noter que par défaut, la taille d'une champ TEXT est de 1024 dans magento.

Fonction newTable

La création d'une table mysql en flat Magento se passe dans un fichier de setup et s'écrit ainsi par exemple:

<?php
$installer = $this;
$installer->startSetup();
$table = $installer->getConnection()
->newTable($installer->getTable('compar/compar'))
->addColumn('infos_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
'identity' => true,
'unsigned' => true,
'nullable' => false,
'primary' => true,
), 'Compar Id')
->setComment('Compar');
$installer->getConnection()->createTable($table);
$installer->endSetup();<:code>

La partie newTable() du script permet d'utiliser les arguments suivants:

public function newTable($tableName = null, $schemaName = null);

Fonction dropTable

La partie dropTable() du script permet d'utiliser les arguments suivants:

public function dropTable($tableName = null, $schemaName = null);

Ici rien de transcendant, rappelez vous juste que la suppression d'une table est irréversible, et qu'il faut prendre en compte les éventuelles clé étrangères et dépendances de modules.

Il n'y a d'ailleurs pas d'exemple dans le code source de magento, du fait du peu d'utilité d'une telle fonction. 

Fonction addColumn

La syntaxe de la fonction de base addColumn est celle-ci:

public function addColumn($name, $type, $size = null, $options = array(), $comment = null)

Le nom, est spécifiable librement, pour le type je vous laisse vous référer au premier paragraphe de ce tutoriel, pour la taille un simple nombre suffira, et pour les options voici celles admises:

$options['unsigned'];
$options['precision'];
$options['scale'];
$options['default'];
$options['nullable'];
$options['primary'];
$options['primary_position'];
$options['identity'];
$options['auto_increment']; <:code>

Comme vous pouvez le constater l'option de position de la colonne n'est pas traité par le code Magento. Votre colonne sera donc placée en dernière position lors de son ajout.

Fonction dropColumn

La fonction admet les arguments suivants:

public function dropColumn($tableName, $columnName, $schemaName = null)

En analysant le code on se rend compte, que les clefs étrangères seront automatiquement supprimées et qu'une vérification de l'existence de la colonne est implémentée, on évite donc à priori les messages d'erreurs bloquants.

Exemple de code :

<?php
$installer = $this;
$installer->startSetup();
$installer->getConnection()->dropColumn(
$installer->getTable('<module>/<module>'),
'<nom de la colonne>'
);
$installer->endSetup();
Livre

Découvrez les best practices en SEO

Téléchargez notre livre blanc SEO !