Doctrine2-Tips : Différence entre versions
(→Générer les tables) |
(→Base de donnée) |
||
| Ligne 163 : | Ligne 163 : | ||
<br> | <br> | ||
{{Console | 1=php app/console doctrine:schema:update --force }} | {{Console | 1=php app/console doctrine:schema:update --force }} | ||
| + | <br> | ||
| + | |||
| + | === Mise à jour === | ||
| + | <br> | ||
| + | {{ Console | 1=php app/console doctrine:schema:update }} | ||
<br> | <br> | ||
Version du 30 novembre 2015 à 10:44
Sommaire
Entité
Générer une entitée
Welcome to the Doctrine2 entity generator
This command helps you generate Doctrine2 entities.
First, you need to give the entity name you want to generate.
You must use the shortcut notation like AcmeBlogBundle:Post.
The Entity shortcut name:_
Grâce à ce que le générateur vous dit, vous l'avez compris, il faut entrer le nom de l'entité sous le format NomBundle:NomEntité. Dans notre cas, on entre donc OCPlatformBundle:Advert.
The Entity shortcut name: OCPlatformBundle:Advert
Determine the format to use for the mapping information.
Configuration format (yml, xml, php, or annotation) [annotation]:_
Comme je vous l'ai dit, nous allons utiliser les annotations, qui sont d'ailleurs le format par défaut. Appuyez juste sur la touche Entrée.
Configuration format (yml, xml, php, or annotation) [annotation]:
Instead of starting with a blank entity, you can add some fields now.
Note that the primary key will be added automatically (named id).
Available types: array, simple_array, json_array, object,
boolean, integer, smallint, bigint, string, text, datetime, datetimetz,
date, time, decimal, float, blob, guid.
New field name (press <return> to stop adding fields):_
On commence à saisir le nom de nos champs. Lisez bien ce qui est inscrit avant : Doctrine2 va ajouter automatiquement l'id, de ce fait, pas besoin de le redéfinir ici. On entre donc notre date : date.
New field name (press <return> to stop adding fields): date
Field type [string]:_
C'est maintenant que l'on va dire à Doctrine à quel type correspond notre propriété date. La liste des types possibles vous est donné par Symfony juste au dessus. Nous voulons une date avec les informations de temps, tapez donc datetime.
Répétez les points 3 et 4 pour les propriétés title, author et content. title et author sont de type string de 255 caractères (pourquoi pas). Content est par contre de type text.
New field name (press <return> to stop adding fields): date
Field type [string]: datetime
New field name (press <return> to stop adding fields): title
Field type [string]: string
Field length [255]: 255
New field name (press <return> to stop adding fields): author
Field type [string]: string
Field length [255]: 255
New field name (press <return> to stop adding fields): content
Field type [string]: text
New field name (press <return> to stop adding fields):_
Lorsque vous avez fini, appuyez sur la touche Entrée.
New field name (press <return> to stop adding fields):
Do you want to generate an empty repository class [no]?_
Oui, on va créer le repository associé, c'est très pratique, nous en reparlerons largement. Entrez donc yes.
Confirmez la génération, et voilà !
Do you want to generate an empty repository class [no]? yes
Summary before generation
You are going to generate a "OCPlatformBundle:Advert" Doctrine2 entity
using the "annotation" format.
Do you confirm generation [yes]?
Entity generation
Generating the entity code: OK
You can now start using the generated code!
C:\wamp\www\Symfony>_
Allez tout de suite voir le résultat dans le fichier Entity/Advert.php. Symfony2 a tout généré, même les getters et les setters ! Vous êtes l'heureux propriétaire d'une simple classe… avec plein d'annotations !
Mettre à jour une entité
Enregistrer en BDD
- Création de l'entité
$advert = new Advert();
- Récupération de l'EntityManager
$em = $this->getDoctrine()->getManager();
- On dit à Doctrine de « persister » l'entité. Cela veut dire qu'à partir de maintenant cette entité (qui n'est qu'un simple objet !) est gérée par Doctrine. Cela n'exécute pas encore de requête SQL, ni rien d'autre.
$em->persist($advert);
- On dit à Doctrine d'exécuter effectivement les requêtes nécessaires pour sauvegarder les entités qu'on lui a dit de persister précédemment.
$em->flush();
- Notre Advert étant maintenant enregistré en base de données grâce au flush(), Doctrine2 lui a attribué un id ! On peut donc utiliser $advert->getId() dans la génération de la route, et non un nombre fixe comme précédemment.
Base de donnée
Créer la base de donnée
Création de la requête
Générer les tables
Mise à jour
Relations
- One To One
<?php
// src/OC/PlatformBundle/Entity/Advert.php
/**
* @ORM\Entity
*/
class Advert
{
/**
* @ORM\OneToOne(targetEntity="OC\PlatformBundle\Entity\Image", cascade={"persist"})
*/
private $image;
// …
}
<?php
// src/OC/PlatformBundle/Entity/Image
/**
* @ORM\Entity
*/
class Image
{
// Nul besoin d'ajouter une propriété ici
// …
}