Skip to content

french Adding Columns

Manuel HERVO edited this page Jan 2, 2012 · 2 revisions

Ajout de colonnes aux tables de la base

Introduction

Le framework de migration délègue toutes les opérations à l'adaptateur de votre RDBMS, qui crée le SQL exacte dont à besoin votre RDBMS.

Parce que les migrations sont portables sur RDMBSs, les définitions des tables et des colonnes doivent être exprimées dans un "langage" de niveau supérieur, et non en SQL spécifique aux RDBMS.

Cette page documente la syntaxe pour ajouter et modifier les colonnes dans votre base de données.

Details

Toutes les colonnes dans une base de données sont vraiment spécifiques à des types généralisés. Par exemple, un varchar (32) est simplement un string qui à une longueur max de 32. Idem pour int (8), c'est juste un numéro avec une valeur maximale de 99999999.

Le framework peut profiter d'offrir des types généralisés (avec les mêmes défauts) et choisir la spécification des détails exacts.

NOTE: La documentation ci-dessous pour ajouter des colonnes est la même que vous ajoutiez une colonne via l'objet TableDefinition (en utilisant la méthode column() sur l'objet retourné par createTable()) ou directement en utilisant la méthode addColumn.

Pour MySQL, les types supportés sont:

Type générique Type MySQL Default length
string varchar 255
text text
mediumtext mediumtext
integer int 11
smallinteger smallint
biginteger bigint
float float
decimal decimal
datetime datetime
timestamp timestamp
time time
date date
binary blob
boolean tinyint 1

Tous les types de colonnes ont des valeurs par défaut pour les détails spécifiques. Par exemple, toutes les colonnes déclarées string auront par défaut une taille de 255 caractères.

Démarrons avec quelques exemples

Hypothèses des valeurs par défaut Toutes les définitions de colonne commencent avec des hypothèses par défaut, que vous pouvez modifier au besoin.

  • Colonnes ont NULL par défault

Voyons un exemple pour commencer (tous les exemples ci-dessous, on suppose que $users est le résultat de l'appel $this->createTable("users");):

Exemple A:

Créons une colonne nommée first_name avec par défaut une longueur de 255 caractères:

   $users->column("first_name", "string");

Ce qui génère le SQL:

    `first_name` varchar(255) NULL

Exemple B: Créons une colonne nommée first_name avec une longueur max de 32 caractères ( Create a column called first_name with a max-length of 32 (autorise implicitement les valeurs NULL):

    $users->column("first_name", "string", array('limit' => 32));

Ce qui génère le SQL:

    `first_name` varchar(32) NULL

Exemple C: Créons une colonne nommée first_name avec une longueur max de 64 caractères, une valeur par défaut à 'mr.' et n'autorisant pas les valeurs NULL:

    $users->column("first_name", "string", array('limit' => 64, 'default' => 'mr.', 'null' => false));

Ce qui génère le SQL:

    `first_name` varchar(64) DEFAULT 'mr.' NOT NULL

Exemple D: Créons une colonne numérique nommée post_count avec une longueur max de 4 chiffres, une valeur par défaut à 0 et la valeur NULL non autorisée:

    $users->column("post_count", "integer", array('limit' => 4, 'default' => 0, 'null' => false));

Ce qui génère le SQL:

    `post_count` integer(4) DEFAULT 0 NOT NULL

Exemple E: Créons une colonne datetime nommée created_at et la valeur NULL non autorisée:

    $users->column("created_at", "datetime", array('null' => false));

Ce qui génère le SQL:

    `created_at` datetime NOT NULL

Exemple F: Précisez votre propre clé clé primaire. Par défaut le framework va générer une colonne 'id' comme clé primaire, mais si vous voulez spécifier votre propre colonne clé primaire passez un booléen à true dans les options avec l'index primary_key. Cela exige que vous spécifiez, à son tour 'id' => false dans les options de createTable.

    $t = $this->createTable('users', array('id' => false, 'options' => 'Engine=InnoDB'));
    $t->column('guid', 'string', array('primary_key' => true));
    $t->finish();

Clone this wiki locally