Ceci est une ancienne révision du document !


Symfony et les Entities (Entity)

Avant de jouer avec les Entities il faut que la base de données soit paramétrée et créée.

→ Source : https://symfony.com/doc/current/doctrine.html#configuring-the-database

Une Entity est un Objet PHP qui sera stocké en base de donnée via l'ORM de Symfony

Pour créer une Entity on utilisera la commande console make:entity (voir ci-dessous).

→ Source : https://symfony.com/doc/current/doctrine.html#creating-an-entity-class

Création d'une Entity

Le but ici est de créé une entity avec les champs suivants:

  • Name : string
  • Url : string
  • VMaj : integer
  • VMin: integer
  • Revision : integer
  • Construction : integer
  • Online_Date : Date

make:entity

Avec la console php bin\console make:entity ou symfony console make:entity

D:\webprojects\test-api-project>php bin\console make:entity

 Class name of the entity to create or update (e.g. BraveGnome):
 > Projects 

 created: src/Entity/Projects.php
 created: src/Repository/ProjectsRepository.php
 
 Entity generated! Now let's add some fields!
 You can always add more fields later manually or by re-running this command.

 New property name (press <return> to stop adding fields):
 > name

 Field type (enter ? to see all types) [string]:
 > string

 Field length [255]:
 > 40

 Can this field be null in the database (nullable) (yes/no) [no]:
 > no

 updated: src/Entity/Projects.php

 Add another property? Enter the property name (or press <return> to stop adding fields):
 > url

 Field type (enter ? to see all types) [string]:
 > string

 Field length [255]:
 > 

 Can this field be null in the database (nullable) (yes/no) [no]:
 > no

 updated: src/Entity/Projects.php

 Add another property? Enter the property name (or press <return> to stop adding fields):
 > vmaj

 Field type (enter ? to see all types) [string]:
 > integer

 Can this field be null in the database (nullable) (yes/no) [no]:
 > 

 updated: src/Entity/Projects.php

 Add another property? Enter the property name (or press <return> to stop adding fields):
 > vmin

 Field type (enter ? to see all types) [string]:
 > integer

 Can this field be null in the database (nullable) (yes/no) [no]:
 >

 updated: src/Entity/Projects.php

 Add another property? Enter the property name (or press <return> to stop adding fields):
 > revision

 Field type (enter ? to see all types) [string]:
 > integer

 Can this field be null in the database (nullable) (yes/no) [no]:
 >

 updated: src/Entity/Projects.php

 Add another property? Enter the property name (or press <return> to stop adding fields):
 > construction

 Field type (enter ? to see all types) [string]:
 > integer

 Can this field be null in the database (nullable) (yes/no) [no]:
 >

 updated: src/Entity/Projects.php

 Add another property? Enter the property name (or press <return> to stop adding fields):
 > online_date

 Field type (enter ? to see all types) [string]:
 > date

 Can this field be null in the database (nullable) (yes/no) [no]:
 >

 updated: src/Entity/Projects.php

 Add another property? Enter the property name (or press <return> to stop adding fields):
 >


 
  Success! 
 

 Next: When you're ready, create a migration with make:migration

Types de champs possibles

Main types

  • string
  • text
  • boolean
  • integer (or smallint, bigint)
  • float

Relationships / Associations

  • relation (a wizard will help you build the relation)
  • ManyToOne
  • OneToMany
  • ManyToMany
  • OneToOne

Array/Object Types

  • array (or simple_array)
  • json
  • object
  • binary
  • blob

Date/Time Types

  • datetime (or datetime_immutable)
  • datetimetz (or datetimetz_immutable)
  • date (or date_immutable)
  • time (or time_immutable)
  • dateinterval

Other Types

  • json_array
  • decimal
  • guid

Fichier Entity généré

src\Entity\Projects.php
<?php
 
namespace App\Entity;
 
use Doctrine\ORM\Mapping as ORM;
 
/**
 * @ORM\Entity(repositoryClass="App\Repository\ProjectsRepository")
 */
class Projects
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;
 
    /**
     * @ORM\Column(type="string", length=40)
     */
    private $name;
 
    /**
     * @ORM\Column(type="string", length=255)
     */
    private $url;
 
    /**
     * @ORM\Column(type="integer")
     */
    private $vmaj;
 
    /**
     * @ORM\Column(type="integer")
     */
    private $vmin;
 
    /**
     * @ORM\Column(type="integer")
     */
    private $revision;
 
    /**
     * @ORM\Column(type="integer")
     */
    private $construction;
 
    /**
     * @ORM\Column(type="date")
     */
    private $online_date;
 
    public function getId(): ?int
    {
        return $this->id;
    }
 
    public function getName(): ?string
    {
        return $this->name;
    }
 
    public function setName(string $name): self
    {
        $this->name = $name;
 
        return $this;
    }
 
    public function getUrl(): ?string
    {
        return $this->url;
    }
 
    public function setUrl(string $url): self
    {
        $this->url = $url;
 
        return $this;
    }
 
    public function getVmaj(): ?int
    {
        return $this->vmaj;
    }
 
    public function setVmaj(int $vmaj): self
    {
        $this->vmaj = $vmaj;
 
        return $this;
    }
 
    public function getVmin(): ?int
    {
        return $this->vmin;
    }
 
    public function setVmin(int $vmin): self
    {
        $this->vmin = $vmin;
 
        return $this;
    }
 
    public function getRevision(): ?int
    {
        return $this->revision;
    }
 
    public function setRevision(int $revision): self
    {
        $this->revision = $revision;
 
        return $this;
    }
 
    public function getConstruction(): ?int
    {
        return $this->construction;
    }
 
    public function setConstruction(int $construction): self
    {
        $this->construction = $construction;
 
        return $this;
    }
 
    public function getOnlineDate(): ?\DateTimeInterface
    {
        return $this->online_date;
    }
 
    public function setOnlineDate(\DateTimeInterface $online_date): self
    {
        $this->online_date = $online_date;
 
        return $this;
    }
}

Fichier Repository généré

src/Repository/ProjectsRepository.php
<?php
 
namespace App\Repository;
 
use App\Entity\Projects;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Common\Persistence\ManagerRegistry;
 
/**
 * @method Projects|null find($id, $lockMode = null, $lockVersion = null)
 * @method Projects|null findOneBy(array $criteria, array $orderBy = null)
 * @method Projects[]    findAll()
 * @method Projects[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class ProjectsRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Projects::class);
    }
 
    // /**
    //  * @return Projects[] Returns an array of Projects 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): ?Projects
    {
        return $this->createQueryBuilder('p')
            ->andWhere('p.exampleField = :val')
            ->setParameter('val', $value)
            ->getQuery()
            ->getOneOrNullResult()
        ;
    }
    */
}

make:migration

D:\webprojects\test-api-project>php bin/console make:migration

  Success!


 Next: Review the new migration "src/Migrations/Version20191027131103.php"
 Then: Run the migration with php bin/console doctrine:migrations:migrate
 See https://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html

Voir : https://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html

Fichier de migration généré

src/Migrations/Version20191027131103.php
<?php
 
declare(strict_types=1);
 
namespace DoctrineMigrations;
 
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
 
/**
 * Auto-generated Migration: Please modify to your needs!
 */
final class Version20191027131103 extends AbstractMigration
{
    public function getDescription() : string
    {
        return '';
    }
 
    public function up(Schema $schema) : void
    {
        // this up() migration is auto-generated, please modify it to your needs
        $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');
 
        $this->addSql('CREATE TABLE projects (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(40) NOT NULL, url VARCHAR(255) NOT NULL, vmaj INT NOT NULL, vmin INT NOT NULL, revision INT NOT NULL, construction INT NOT NULL, online_date DATE NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');
    }
 
    public function down(Schema $schema) : void
    {
        // this down() migration is auto-generated, please modify it to your needs
        $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');
 
        $this->addSql('DROP TABLE projects');
    }
}

doctrine:migrations:migrate

D:\webprojects\test-api-project>php bin/console doctrine:migrations:migrate

                    Application Migrations


WARNING! You are about to execute a database migration that could result in schema changes and data loss. 
Are you sure you wish to continue? (y/n)y
Migrating up to 20191027131103 from 0

  ++ migrating 20191027131103

     -> CREATE TABLE projects (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(40) NOT NULL, url VARCHAR(255) NOT NULL, vmaj INT NOT NULL, vmin INT NOT NULL, revision INT NOT NULL, construction INT NOT NULL, online_date DATE NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB

  ++ migrated (took 557.6ms, used 16M memory)

  ------------------------

  ++ finished in 569.9ms
  ++ used 16M memory
  ++ 1 migrations executed
  ++ 1 sql queries

Résultats de la migration

Resources

Vous pourriez laisser un commentaire si vous étiez connecté.