Je te montre comment créer des entités dans une application web sous Symfony 5
Les entités avec Symfony 5
Une entité est un objet de domaine léger qui doit être conservé. En général, une entité représente une table dans une base de données relationnelle et chaque instance d’entité correspond à une ligne de la table. Un référentiel est une abstraction de la fonctionnalité de persistance. Il permet de stocker, récupérer et rechercher des objets d’entité. Par essence, un référentiel est une collection d’objets d’entité.
Cette commande va vous permettre de créer une Entité :
php bin/console make:entity
Ensuite suiviez les instructions comme ci-dessous
Class name of the entity to create or update: > Personnages New property name (press <return> to stop adding fields): > nom Field type (enter ? to see all types) [string]: > string Field length [255]: > 255 Can this field be null in the database (nullable) (yes/no) [no]: > no
Si il vous demande de créer une autre entité , faites justes « Entrez » puis la procédure sera terminé, et Symfony te créera le fichier Personnages.php qui se trouve dans src/Entity et également un Repository , le Repository est lié à l’entité, dans le repository, tu vas pouvoir créer des requêtes de types ORM pour allez chercher tes données
src/Entity/Personnages.php :
<?php namespace App\Entity; use App\Repository\PersonnagesRepository; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass=PersonnagesRepository::class) */ class Personnages { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string", length=255) */ private $nom; public function getId(): ?int { return $this->id; } public function getNom(): ?string { return $this->nom; } public function setNom(string $nom): self { $this->nom = $nom; return $this; } }
src/Repository/PersonnagesRepository.php :
<?php namespace App\Repository; use App\Entity\Personnages; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; /** * @method Personnages|null find($id, $lockMode = null, $lockVersion = null) * @method Personnages|null findOneBy(array $criteria, array $orderBy = null) * @method Personnages[] findAll() * @method Personnages[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class PersonnagesRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Personnages::class); } // /** // * @return Personnages[] Returns an array of Personnages objects // */ /* public function findByExampleField($value) { return $this->createQueryBuilder('p') ->andWhere('p.exampleField = :val') ->setParameter('val', $value) ->orderBy('p.id', 'ASC') ->setMaxResults(10) ->getQuery() ->getResult() ; } */ /* public function findOneBySomeField($value): ?Personnages { return $this->createQueryBuilder('p') ->andWhere('p.exampleField = :val') ->setParameter('val', $value) ->getQuery() ->getOneOrNullResult() ; } */ }
Créer des fixtures ( des exemples de données )
Lancer cette ligne de commande pour installer des fixtures
composer require orm-fixtures --dev
Note : j’ai ajouté ceci dans mon fichier de fixture pour PersonnageFixtures.php
use App\Entity\Personnages;
<?php namespace App\DataFixtures; use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Persistence\ObjectManager; use App\Entity\Personnages; class PersonnagesFixtures extends Fixture { public function load(ObjectManager $manager) { // $product = new Product(); // $manager->persist($product); $personnage1 = new Personnages(); $personnage1->setNom("Goku"); $manager->persist($personnage1); $personnage2 = new Personnages(); $personnage2->setNom("Vegeta"); $manager->persist($personnage2); $manager->flush(); } }
Dans cette fixture j’ai ajouté 2 personnages ( users ) , je peux lancer cette requête qui va m’ajouter les personnages automatiquement dans ma base de données
php bin/console doctrine:fixtures:load
Si tout se passe bien j’aurai cette écran avec le nom de ma base de données et les loadings en vert
Je peux vérifier dans ma base de données via phpmyadmin si les données sont bien présentes