Skip to content

Générer une entité Doctrine (couche Modèle)

Florent SCHILDKNECHT edited this page Jan 27, 2014 · 1 revision

Il est possible de générer une entité Doctrine 2 depuis l'interface de ligne de commande, ou simplement en créant la classe au bon endroit.

Ligne de commande (depuis la racine du projet [/var/www/onyx]) :

php app/console doctrine:generate:entity

Il faut ensuite suivre les indications en donnant tout d'abord le nom raccourci de l'entité, précédé du namespace. Par exemple, pour générer src/Test/Bundle/Entity/TestEntity, vous devrez préciser TestBundle:TestEntity

Concernant le type, une bonne pratique recommande d'utiliser les annotations PHP plus que du YAML ou XML. Avec ce mode, tout est concentré dans le fichier de l'entité.

Il vous demande ensuite les différents champs, sachant que la liste n'est aucunement définitive, il est toujours possible d'éditer le fichier généré... NB : sur ce point, il est préférable de toujours nommer les champs sans camelCase, Doctrine se chargera de les générer, car il s'agit du champ SQL (Exemple: created_at donnera le champ SQL created_at et la propriété createdAt pour l'entité, donnant ainsi les accessers getCreatedAt() et setCreatedAt())

Penser également à toujours créer un Repository, même sans méthode, pour l'entité. (src/Test/Bundle/Entity/TestEntityRepository)

Le fichier entité (généré ou nom)

Chaque fichier d'entité est placé en principe dans le sous-dossier "Entity" du bundle. (src/Test/Bundle/Entity/) Le namespace est donc :

namespace Test/Bundle/Entity;

Le nom de class est toujours en UpperCamelCase.

/**
 * TestEntity
 *
 * @ORM\Table(name="test_entity")
 * @ORM\Entity(repositoryClass="Test\Bundle\Entity\TestEntityRepository")
 */
class TestEntity
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    // [...]
}

Editer une entité existante

Pour ajouter un champ dans une entité, il faut déclarer une nouvelle propriété avec les annotations correspondantes. Par exemple, pour ajouter une chaîne de caractères :

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

/**
 * Set name
 *
 * @param string $name
 * @return TestEntity
 */
public function setName($name)
{
    $this->name = $name;

    return $this;
}

/**
 * Get Name
 *
 * @return string 
 */
public function getName()
{
    return $this->name;
}

NB : Il n'est pas obligatoire d'ajouter manuellement les accesseurs, cela peut être effectué par la commande suivante (toujours depuis la racine du projet) :

php app/console doctrine:generate:entities Test/Bundle/Entity/TestEntity

Cette commande va regarder toutes les propriétés de l'entité et ajouter les accesseurs manquants sans écraser les existants.

Mettre à jour la base

Comme lors de l'installtion, il faut mettre à jour la base après chaque changement de structure. Cela peut être fait toujours avec la même commande :

php app/console doctrine:schema:update --force