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.

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

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;
    }
}

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

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