PRÉSENTATION DU COURS

Créez vos tables gràce aux entités

Créez vos tables sans avoir à toucher de SQL grâce à Doctrine et sons système d'entités

Les entités de doctrine

Comme dit précédement, Doctrine est un ORM (object relation mapper), qui est un terme assez compliqué pour un concept qui vas énormément nous servir !

Derrière son nom barbarre, se cache le principe suivant : L'orm sert à faire correspondre des tables dans la base de données à des classes dans notre code

De cette manière créer une classe article dans notre code, nous feras créer une table article dans la base de données. Comme ce sont des classes tout ce qu'il y a de plus classique en PHP on peut très bien les faires à la main et ajouter du code "custom" 😏

Mais comme nous sommes des petits flemmards, on va installer un bundle permettant de faire tout ce travail là pour nous :

composer require maker

Une fois installez tapez la commande suivante :

php bin/console make:entity

Avant de lancer la commande, le mot entité est très importante dans doctrine, car c'est le nom des classes permettant de créer / lire / modifier / supprimer des tables en base. Nous allons souvent nous référer à ça avec le mot entité, gardez le donc dans un coin de votre tête

Ok, maintenant nous allons pouvoir donner un nom à votre classe (Appelons là Monkey)

Générez ensuite une entité à l'aide des questions posées dans le CLI pour avoir des données de ce type là :

nom sexe famille age alimentation entrée au parc
Malta F Oranoutang 12 végétarienne 13/02/2012
Geogres M Gorille 16 végétarienne 15/09/2009
Boulkanou M Chimpanzé 71 Homnivore 18/10/2019

Si vous ne savez pas quels sont les types disponibles, vous pouvez envoyez ? comme réponse à type et doctrine vous enverra les possibilités

Vous noterez que les types sont différents des types MYSQL, c'est normal c'est pour gommer les petites différences de nommage entre les différentes bases de données.

N'ayez pas peut, si vous faites une petites faute, on va pouvoir la corriger après coup !

Allons voir ce qui a été créé

Normalement, Doctrine vous a créé deux dossier :

  • src/Entity : Dossier contenant les entités des tables
  • src/Repository : Dossier permettant d'ajouter des fonctionnalités à nos entités

Vous devriez avoir quelque chose dans le genre (attention cela ne correspond pas au schema précédent) :

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\SaladMushputRepository")
 */
class SaladMushpit
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $name;

    /**
     * @ORM\Column(type="boolean")
     */
    private $rating;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }

    public function getRating(): ?bool
    {
        return $this->rating;
    }

    public function setRating(bool $rating): self
    {
        $this->rating = $rating;

        return $this;
    }
}

Comme vous pouvez le voir, on retrouve toutes le propriétés que nous avons mise dans le CLI, ainsi que les getters et les setters correspondant. Quelle économie de temps exceptionnelle !

Par contre, si vous regardez vien, vous avez des annotations bizzares au niveau des propriétés comme name, id, rating.

Sachez que c'est tout à fait normale, c'est la manière de doctrine de définir les propriétés de la colonne pour la base de données.

Une des annotations les plus importantes est celle au dessus de la classe :

/**
 * @ORM\Entity(repositoryClass="App\Repository\SaladMushputRepository")
 */
class SaladMushpit
{

Elle permet de définir cette classe comme une entité pour être mappé par DOCTINE, ainsi que le repository lié. Pas de magie ici, tout est explicite !

Pour éviter d'oublier ces petites configurations, passez toujours par la commande make comme vu plus tôt dans le cours, ça vous évitera quelques bonnes galères !

Pour vous aider dans les annotations de doctine, vous pouvez allez sur cette page pour retrouver un lexique de toutes les annotations Doctrine

Créer la classe en base de données

Par contre si on va en base, pas de table... bizzare.

C'est juste que pour le moment, nous n'avons pas dit à la base de se mettre à jour.

Pour ça, il faut créer une migration et l'exécuter (on y reviendra plus tard!).

Pour l'instant nous allons juste faire les commandes pour mettre en place notre table :

php bin/console make:migration
 php bin/console doctrine:migrations:migrate

Et hop votre table est toute prête dans votre base de données, impeccable !

Conclusion

Vous savez désormais créer des tables et votre base de données, nous allons désoramis voir comment intéragir avec la base et ses données

Envie de discuter du contenu ?

logo twitter @GarnierKristen