Table des matières

Databases : Doctrine

Installer doctrine (et maker par la même occasion):

composer require doctrine maker

Configuration

Définir la variable DATABASE_URL dans le fichier .env à la racine du projet :

# .env

# customize this line!
DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name"

# to use sqlite:
# DATABASE_URL="sqlite:///%kernel.project_dir%/var/app.db"

Création base de données

Création de la base mentionnée dans le fichier de configuration :

php bin/console doctrine:database:create

Génération d'une classe métier

php bin/console make:entity Product

Le code généré est le suivant :

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
 */
class Product
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    // add your own fields
}

Ajout d'attributs et mise à jour de la base

Ajout des champs name et price :

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
 */
class Product
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=100)
     */
    private $name;

    /**
     * @ORM\Column(type="decimal", scale=2, nullable=true)
     */
    private $price;
}

Génération du script de mise à jour :

php bin/console doctrine:migrations:diff

Exécution des mises à jour :

php bin/console doctrine:migrations:migrate

Génération des classes depuis la base de données

php bin/console doctrine:mapping:convert --from-database annotation ./src/Entity