4 - Création de la base de données (Symfony 7)

Temps de lecture : 16 minutes environ.

Bienvenue dans ce quatrième volet de la série Symfony 7. Aujourd'hui, nous allons nous concentrer sur la création de la base de données et des tables nécessaires à l'authentification des utilisateurs pour notre projet OpenBlog.

Plan de la Base de Données

Notre schéma de base de données est structuré de la manière suivante :

  • users : Table des utilisateurs.
  • categories : Table des catégories.
  • keywords : Table des mots-clés.
  • posts : Table des articles.
  • comments : Table des commentaires.
  • post_categories : Table de relation entre les articles et les catégories.
  • post_keywords : Table de relation entre les articles et les mots-clés.

Chaque table a des relations spécifiques et des contraintes. Assurez-vous d'avoir des connaissances de base en SQL pour comprendre la structure des tables et la gestion des relations.

Le schéma de la base de données est accessible sur DrawSQL.

Création de l'Entité Utilisateur

Commençons par créer la table des utilisateurs. Ouvrez votre terminal et exécutez la commande suivante pour créer une entité utilisateur :

symfony console make:user

Répondez aux questions posées par le terminal pour configurer l'entité :

  1. Nom de la classe d'authentification de sécurité : Users
  2. Stocker les données utilisateurs dans la base de données via Doctrine : yes
  3. Identifiant unique pour l'utilisateur : nickname
  4. Hacher les mots de passe : yes

Cette commande génère deux fichiers : Users.php dans le dossier src/Entity et UsersRepository.php dans le dossier src/Repository.

Ajout de Propriétés à l'Entité Utilisateur

Pour ajouter des propriétés supplémentaires, utilisez la commande make:entity :

symfony console make:entity

Précisez que l'entité à modifier est Users et ajoutez les propriétés suivantes :

Email :

  • Type : string
  • Longueur : 255
  • Peut être nul : no

isVerified :

  • Type : boolean
  • Peut être nul : no

Après avoir exécuté ces commandes, votre fichier Users.php devrait ressembler à ceci :

<?php

namespace App\Entity;

use App\Repository\UsersRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
use Symfony\Component\Security\Core\User\UserInterface;

#[ORM\Entity(repositoryClass: UsersRepository::class)]
class Users implements UserInterface, PasswordAuthenticatedUserInterface
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;

#[ORM\Column(length: 180, unique: true)]
private ?string $nickname = null;

#[ORM\Column]
private array $roles = [];

/**
* @var string The hashed password
*/
#[ORM\Column]
private ?string $password = null;

#[ORM\Column(length: 255)]
private ?string $email = null;



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

public function getNickname(): ?string
{
return $this->nickname;
}

public function setNickname(string $nickname): static
{
$this->nickname = $nickname;

return $this;
}

/**
* A visual identifier that represents this user.
*
* @see UserInterface
*/
public function getUserIdentifier(): string
{
return (string) $this->nickname;
}

/**
* @see UserInterface
*/
public function getRoles(): array
{
$roles = $this->roles;
// guarantee every user at least has ROLE_USER
$roles[] = 'ROLE_USER';

return array_unique($roles);
}

public function setRoles(array $roles): static
{
$this->roles = $roles;

return $this;
}

/**
* @see PasswordAuthenticatedUserInterface
*/
public function getPassword(): string
{
return $this->password;
}

public function setPassword(string $password): static
{
$this->password = $password;

return $this;
}

/**
* @see UserInterface
*/
public function eraseCredentials(): void
{
// If you store any temporary, sensitive data on the user, clear it here
// $this->plainPassword = null;
}

public function getEmail(): ?string
{
return $this->email;
}

public function setEmail(string $email): static
{
$this->email = $email;

return $this;
}

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

public function setIsVerified(bool $isVerified): static
{
$this->isVerified = $isVerified;

return $this;
}


}

Création des Autres Entités

Répétez le processus pour créer les autres entités : Keywords, Categories, Posts, et Comments. Voici quelques exemples de commandes pour créer et ajouter des propriétés à ces entités.

Keywords

symfony console make:entity Keywords

Propriétés :

  • Name :
    • Type : string
    • Longueur : 50
    • Peut être nul : no
  • Slug :
    • Type : string
    • Longueur : 60
    • Peut être nul : no

Categories

symfony console make:entity Categories

Propriétés :

  • Name :
    • Type : string
    • Longueur : 50
    • Peut être nul : no
  • Slug :
    • Type : string
    • Longueur : 60
    • Peut être nul : no
  • Parent :
    • Type : relation
    • Cible : Categories
    • Type de relation : many-to-one
    • Peut être nul : yes

Posts

symfony console make:entity Posts

Propriétés :

  • Title :
    • Type : string
    • Longueur : 255
    • Peut être nul : no
  • Slug :
    • Type : string
    • Longueur : 255
    • Peut être nul : no
  • Content :
    • Type : text
    • Peut être nul : no
  • FeaturedImage :
    • Type : string
    • Longueur : 255
    • Peut être nul : no
  • User :
    • Type : relation
    • Cible : Users
    • Type de relation : many-to-one
    • Peut être nul : no
    • Suppression en cascade : yes

Ajoutez également les relations many-to-many pour les Categories et les Keywords :

  • Categories :
    • Type : relation
    • Cible : Categories
    • Type de relation : many-to-many
    • Propriété inverse : posts
  • Keywords :
    • Type : relation
    • Cible : Keywords
    • Type de relation : many-to-many
    • Propriété inverse : posts

Comments

symfony console make:entity Comments

Propriétés :

  • Content :
    • Type : text
    • Peut être nul : no
  • IsReply :
    • Type : boolean
    • Peut être nul : no
  • Parent :
    • Type : relation
    • Cible : Comments
    • Type de relation : many-to-one
    • Peut être nul : yes
  • User :
    • Type : relation
    • Cible : Users
    • Type de relation : many-to-one
    • Peut être nul : no
    • Suppression en cascade : yes
  • Post :
    • Type : relation
    • Cible : Posts
    • Type de relation : many-to-one
    • Peut être nul : no
    • Suppression en cascade : yes

Génération des Fichiers de Migration

Après avoir créé toutes vos entités, générez les fichiers de migration pour créer les tables dans la base de données :

symfony console make:migration

Cette commande crée un fichier de migration dans le dossier migrations. Pour appliquer cette migration et créer les tables dans la base de données, exécutez :

symfony console doctrine:migrations:migrate

Vérification de la Base de Données

Accédez à votre outil de gestion de base de données (comme PHPMyAdmin) pour vérifier que toutes les tables ont été créées correctement. Vous devriez voir les tables suivantes :

  • users
  • categories
  • keywords
  • posts
  • comments
  • post_categories
  • post_keywords

Conclusion

Nous avons vu comment créer des entités et générer les tables correspondantes dans la base de données pour notre projet OpenBlog. La prochaine fois, nous aborderons l'authentification des utilisateurs, y compris les formulaires de connexion et d'inscription.

Obtenir de l'aide

Pour obtenir de l'aide, vous pouvez accéder au serveur Discord pour une entraide par chat.

4 - Création de la base de données (Symfony 7)
Article publié le

Catégories : Symfony Symfony 7

Mots-clés : MySQL Symfony sql entites doctrine entity Symfony 7

Partager : Partager sur Facebook Partager sur Twitter Partager sur LinkedIn