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 symfony console make:entity %EntityName%
(voir ci-dessous).
→ Source : https://symfony.com/doc/current/doctrine.html#creating-an-entity-class
Le but ici est de créé une entity
avec les champs suivants:
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
Main types
Relationships / Associations
Array/Object Types
Date/Time Types
Other Types
<?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; } }
<?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() ; } */ }
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
<?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'); } }
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