Créer votre première Entité avec Symfony
Qu'est-ce qu'une Entité ?
Dans les leçons précédentes, nous avons vu que l'ORM fait le pont entre le monde PHP et le monde SQL.
Eh bien, l'Entité est l'objet PHP qui représente une table dans votre base de données.
Si vous voulez une table "Article" dans votre base de données, vous allez créer une classe PHP Article. Chaque propriété de cette classe (id, title, content) deviendra une colonne dans votre table SQL.
Pratique ! 😃
Mais allons-nous créer manuellement une entité ?
Non ! Car il y a le MakerBundle !
Le MakerBundle
Pour créer une Entité, on n'écrit pas tout le code à la main. Symfony possède un assistant ultra-performant : le MakerBundle.
Nous allons donc utiliser cet outil pour créer une Entité.
php bin/console make:entity
Le terminal va vous demander les informations de l’Entité.
Le nom de la classe PHP (et de la table de la base de données)
Class name of the entity to create or update (e.g. GrumpyKangaroo):
> Article
L'option "Broadcast Entity Updates"
Nous n'allons pas utiliser cette option car nous débutons.
Add the ability to broadcast entity updates using Symfony UX Turbo? (yes/no) [no]:
> no
Deux fichiers ont été générés
Deux fichiers ont été générés :
-
src/Entity/Article.php -
src/Repository/ArticleRepository.php
Le terminal continue à nous demander des choses.
Les propriétés (ou colonnes)
On commence par nous demander le nom d'une propriété.
New property name (press <return> to stop adding fields):
> title
Ensuite, le type du champ.
Field type (enter ? to see all types) [string]:
> string
En tapant "?", vous avez une liste de tous les champs disponibles.
La taille du champs.
Field length [255]:
> 255
La question suivante nous demande si le champ peut accepter la valeur null.
Can this field be null in the database (nullable) (yes/no) [no]:
> no
On nous indique que src/Entity/Article.php a été mis à jour. En effet, le fichier a été modifié grâce aux informations que nous avons enregistrées.
On peut ajouter une nouvelle propriété (ou colonne) ou taper sur Enter pour terminer.
Essayer de créer `content` !
Qu'est-ce que Symfony a généré ?
Comme nous l'avons vu ensemble, Symfony a généré deux fichiers :
-
src/Entity/Article.php -
src/Repository/ArticleRepository.php
L'objet : src/Entity/Article.php
C'est une classe PHP classique. Vous y trouverez vos propriétés (title, content) et des getters/setters (des méthodes pour lire et modifier les données).
<?php
namespace App\Entity;
use App\Repository\ArticleRepository;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: ArticleRepository::class)]
class Article
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $title = null;
#[ORM\Column(length: 255)]
private ?string $content = null;
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): static
{
$this->title = $title;
return $this;
}
public function getContent(): ?string
{
return $this->content;
}
public function setContent(string $content): static
{
$this->content = $content;
return $this;
}
}
L'objet : src/Repository/ArticleRepository.php
C'est ici que vous écrirez vos requêtes personnalisées plus tard (ex: "Trouver les 3 articles les plus récents").
Les types de champs les plus courants
Voici un pense-bête pour bien choisir vos types.
Et maintenant ?
Maintenant, il nous faut construire notre table SQL, pour qu'elle apparaisse dans notre base de données. Nous avons créé d'une certaine manière le plan (le code PHP) et il faut désormais construire la maison (la table SQL) grâce à une étape qui s'appelle "La Migration". Nous verrons cette étape dans la prochaine leçon.
