26/03/2023

1. Entité

Lu 293 fois Licence Creative Commons

Création d'entité

Créons la première entité correspondant aux évènements, avec la commande interactive make:entity:

php bin/console make:entity

On indique d'abord le nom de la classe: Event.

[output] Class name of the entity to create or update (e.g. OrangeKangaroo):
 > Event

Les fichiers des classes d'entité et de repository sont alors créés et on peut commencer à ajouter les propriétés:

[output] created: src/Entity/Event.php
[output] created: src/Repository/EventRepository.php
[output] 
[output] Entity generated! Now let's add some fields!
[output] You can always add more fields later manually or by re-running this command.
[output]
[output] New property name (press <return> to stop adding fields):
 > 

En laissant vide, la commande s'arrêtera. Dans ce cas pas de panique, relancez-la en indiquant le nom de l'entité existante et celle-ci sera modifiée.
Pour chaque propriété ajoutée il faudra généralement indiquer:

  • son nom
  • son type
  • sa taille (si le type choisi le permet)
  • si elle est nullable

Ajoutez les propriétés suivantes:

Description Nom Type Taille Nullable
Le nom de l'événement title string 255
Une description facultative description text
La date et heure de début startAt datetime
La date et heure de fin endAt datetime

Structure d'une entité

Ouvrez le fichier de l'entité /src/Entity/Event.php. La configuration est gérée par des attributs de Doctrine\ORM\Mapping.

L'attribut Entity indique à Doctrine que cette classe est une entité dont le repository correspondant est EventRepository:

#[ORM\Entity(repositoryClass: EventRepository::class)]
class Event

L'identifiant a déjà été généré par la commande make:entity et comporte 3 attributs indiquant qu'il s'agit de la clé primaire, que sa valeur est générée automatiquement et qu'il s'agit bien d'une colonne en base:

#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;

Les autres propriétés ont seulement l'attribut Column reprennant les spécificités indiquées précédemment:

#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $description = null;

Mais pour l'instant, il n'y a aucune table correspondante en base de données.