Documentation magento / mysql

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();