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 tablessrc/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