Les entités avec Symfony 5

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

Nos autres cours