Skip to content

Instantly share code, notes, and snippets.

@aliastim
Last active October 17, 2020 12:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aliastim/f11c5a369728956d1460ca160859549f to your computer and use it in GitHub Desktop.
Save aliastim/f11c5a369728956d1460ca160859549f to your computer and use it in GitHub Desktop.

Découvrir Eloquent, l'ORM de Laravel

Comment fonctionne les migrations :

A chaque fois que l'on souhaite modifier la base de données (ajouter, modifier, supprimer une table), il est nécéssaire de créer une nouvelle migration :

  • Une migration est unique et ne doit pas être modifiée.
  • On peut modifier plusieurs tables dans la même migration
  • la fonction up() réalise les modifications indiquées lors du php artisan migrate
  • la fonction down() réalise les modifications indiquées lors d'un retour en arrière (s'il y a une erreur) lors d'un php artisan migrate:rollback

Créer une migration

‼️ Si l'on souhaite créer une nouvelle table, commencer par créer un modèle, une migration sera générée automatiquement.

Créer une migration :

php artisan make:migration Nom_de_La_migration

Le nom de la migration n'impacte en rien la table mais sert uniquement d'indication sur son objectif, ex : Create_users_table, add_firstname_to_users_table etc

Si la migration consiste à créer une table, on peut ajouter "--create=nomdelatable" :

php artisan make:migration Nom_de_La_migration --create=nomdedatable

Création d'une table

Création d'un modèle :

php artisan make:model Nomdelatable

⁉️ Si l'on souhaite pouvoir intéragir avec la bdd (Envoyer et Récupérer des informations en base de données), il nous faut créer un modèle. Cette commande va également créer automatiquement une migration.

Exemple de migration pour créer une table :

class AddMessage extends Migration
{
    public function up()
    {
        Schema::create('messages', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('from_id')->unsigned();
            $table->integer('to_id')->unsigned();
            $table->foreign('from_id', 'from')->references('id')->on('users')->onDelete('cascade');
            $table->foreign('to_id', 'to')->references('id')->on('users')->onDelete('cascade');
            $table->text('content');
            $table->timestamp('created_at')->useCurrent();
            $table->dateTime('read_at')->nullable();

        });
    }
    
    public function down()
    {
        Schema::drop('messages');
        //Lorsque la migration est faite en sens inverse, on supprime la table message
    }
}

Exemple de modèle d'une table :

class Message extends Model
{
    protected $fillable = [
        'content', 'from_id', 'to_id', 'read_at', 'created_at'
    ];

    protected $dates = ['created_at', 'read_at'];

    public $timestamps = false;

    public function from() {
        return $this->belongsTo(User::class, 'from_id');
    }
}

⚠️ Les colonnes modifiables doivent être présent dans le tableau $fillable. Mettre à jour la base de données :

php artisan migrate

Pour annuler la migration en base de données :

php artisan migrate:rollback

Modification d'une table :

Pour modifier une table, il suffit d'indiquer les modifications dans une nouvelle migration.

Créer une migration :

php artisan make:migration Nom_de_La_migration

Le nom doit indiquer le changement effectué dans la migration, exemple : 'add_firstname_to_users_table'

▶️ Puis indiquer la modification à effectuer dans la migration :
Pour modifier une colonne existante :

    public function up()
    {
        Schema::table('messages', function (Blueprint $table) {
            $table->integer('content')->unsigned()->nullable();
        });
    }
     public function down()
    {
        //
    }

⚠️ Ici, on modifie simplement une colonne existante, on n'a donc pas besoin de compléter la fonction down()

Pour ajouter une colonne :

    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('firstname')->nullable();
        });
    }
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('firstname');
        });
    }

⚠️ Ici, on ajoute une colonne, on précise alors à la fonction down() (retour en arrière) que si l'on souhaite revenir en arrière (php artisan migrate:rollback), il doit exécuter la commande inverse, c'est à dire supprimer la colonne.

Mettre à jour la base de données :

php artisan migrate

Annuler les modifications en base de données :

php artisan migrate:rollback

Supression d'une table

Pour supprimer une table :

    public function up()
    {
        Schema::drop('messages');
    }

Pour revenir en arrière, il suffit de supprimer cette migration et de refaire un php artisan migrate

Table liées

Vidéo -> 5min 30

Attributs disponibles pour les migrations :

  • -> increments() : Permet d'auto-incrémenter (utilisé en général pour l'id)
  • -> unique() : Permet de rendre un élément unique
  • -> nullable() : Permet de rendre un élément non obligatoire
  • -> after('column') : Permet de positionner une colonne après une autre en base de données
  • -> unsigned() : OBLIGATOIRE pour des colonnes de type foreign key. Défini un élément comme non assigné à sa création.
  • -> references('column')->on('table')->onDelete('cascade') : Permet de lier une colonne à une colonne d'une autre table et à supprimer en cascade
  • -> useCurrent() : Pour une date, permet de la générer automatiquement
  • -> default() : Permet de définir une valeur par défaut
  • -> change() : Permet de modifier une colonne déjà existante (requiert doctrine/dbal) (composer require doctrine/dbal)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment