Détails du sujet

Symfony 3 [Quiz 2] [Pile 4]

Doctrine, Composer dans le FrameWork Symfony 3

Toutes les cartes

Doctrine

Comment gagner en performance lorsque l'on utilise les méthodes persist() et flush() du Manageur d'Entités?

Faire un maximum de persist() pour les entités à sauver en BDD avant d'exéctuer un seul flush()


Doctrine utilise les Transactions.

Quel est l'intérêt?

Cela permet de garder une BDD intègre.

Si deux Entités A et B doivent être enregistrées ensemble pour que l'information soit juste et que l'enregistrement de l'Entité A échoue alors l'enregistrement de l'Entité B sera annulée.


Doctrine

La méthode flush() traitera-t-elle indifférement une entité fraichement créée d'une entité récupèrée d'une BDD?

Oui

Car Doctrine utilisera INSERT INTO si l'entité ne possède pas d'id (entité fraichement créée) et utilisera UPDATE si l'entité possède un id (entité récupèrée depuis une BDD)


Doctrine

Doit-on faire un persist() avant un flush() sur une entité que l'on a récupérée de la bdd grâce à son répository?

Non

 


Si on lance un flush(), Doctrine fera-t-il une requête UPDATE si l'Entité récupèrée par son repository n'a pas été modifiée?

Non


Doctrine

Quelle est le rôle de la méthode

detach('NomEntité')

du Manager d'Entités?

Annule le persist() de l'Entité.


Doctrine

Quelle est la différence entre ces deux méthodes du Manager d'Entités?

  1. clear('NomEntité')
  2. clear()
  1. clear('NomEntité) annule tous les persist() de l'Entité
  2. clear() annule tous les persist() de toutes les Entités

Doctrine

Quelle est le rôle de la méthode

contains('NomEntité')

du Manager d'Entités?

Retourne TRUE si l'Entité est prise en charge par le Manager d'Entités.

C'est à dire s'il y a un persist() sur l'Entité.


Doctrine

Quelle est le rôle de la méthode

refresh('NomEntité')

du Manager d'Entités?

Met à jour l'Entité avec les données venant de la BDD.


Quelle est le rôle de la méthode

remove('NomEntité')

du Manager d'Entités?

Supprime l'Entité de la BDD aprés le prochain flush()


Doctrine

Les repositories sont-ils un ensemble d'outils pour récupérer facilement les Entités?

Oui


Doctrine

Comment récupérer depuis la BDD le contenu de l'Entité News dont l'id est 3 si son repository est $newsRepo?

$newsRepo->find(3)


Doctrine

Comment récupérer depuis la BDD le contenu de l'Entité News dont l'id est 3 avec le Manager D'Entités?

$em = $this->getDoctrine()->getManager()

  • $em->find('NomBundle:NomEntité', 3)

ou

  • $em->find('FQCN_de_L_Entité', 3)

Doctrine

Peut-on récupérer le contenu d'une Entité à partir de la BDD en utilisant

  1. Le manager d'entité
  2. Le répositorie de l'entité

 Oui


Composer

La commande suivante

>php composer.phar update --no-plugins --no-scripts

nous demandera-t-elle en fin d'installation de renseigner les informations de notre BDD dans le fichier parameters.yml?

Non, car on a désactivé les scripts.


En ligne de commande

Commentez ce resultat obtenu avec

>php bin/console container:debug

  • 'mailer' est un alias qui pointe vers le nom de service 'swiftmailer.mailer.default'
  • 'swiftmailer.mailer.default' est le nom de service qui est lié à la classe 'Swift_Mailer'

 


Doctrine

Quelles sont les 4 types de relations entre Entités?

  • One-To-One
  • One-To-Many 
  • Many-To-One
  • Many-To-Many

Doctrine

Dans une relation entre deux entités, a-t-on

une entité Propriétaire

et

une entité Inverse?

Oui

Propriétaire = Owning Side ou Parent en Anglais

Inverse = Inverse Side ou Child en Anglais


Doctrine

Quelle est l'entité Propriétaire dans une relation One-To-One entre deux entités?

L'Entité qui contient la référence à l'autre entité


Doctrine

Doctrine gère-t-il pour nous la création de la BDD, des tables et des relations entres tables?

Oui


Doctrine

Une relation entre deux entités peut-elle être à sens unique ou à double sens (bidirectionnelle)?

Oui


Doctrine

Que signifie qu'une relation entre deux entités est à sens unique?

Cela signifie que l'on peut faire

EntitéPropriétaire->getEntitéInverse()

mais pas EntitéInverse->getEntitéPropriétaire()


Doctrine pratique le "lazy loading". Expliquez.

Par défaut Doctrine récupèrere l'entité souhaitée sans les autres entités qui lui sont lièes à moins de le lui spécifier


Doctrine

Qu'est-ce qu'une relation One-To-One entre deux entités?

C'est une relation unique entre deux entités.

Quant une entité A ne peut être liée qu'à une entité B et que l'entité B ne peut être liée qu'à une entité A


Doctrine

Qu'elle type de relation serait la plus appropriée pour lier une entité Pays à une entité Capitale?

Une relation One-To-One

Un Pays ne peut avoir qu'une Capitale et une Capitale ne peut appartenir qu'à un Pays


Doctrine

Dans l'entité propriétaire, quelle annotation doit-on placer au dessus de l'attribut qui représente l'entité inverse, pour créer une relation One-To-One?

OneToOne(targetEntity="FQCN_entité_inverse")


Doctrine - Relation One-To-One

Dans l'entité propriétaire, que doit-on ajouter à cette annotation située au dessus de l'attribut inverse pour qu'un persist(Entité Propriétaire) entraine un persiste sur l'entité inverse?

 

OneToOne(targetEntity="FQCN_entité_inverse")

cascade={''persist''}

OneToOne(targetEntity="FQCN_entité_inverse", cascade={"persist"})


Doctrine - Relation One-To-One

Dans l'entité propriétaire, quelle annotation doit-on placer au dessus de l'attribut qui représente l'entité inverse, pour rendre l'entité inverse obligatoire?

JoinColumn(nullable=false)

Commentez les lignes 9 et 10
  • Ligne 9. L'entité Advert est liée de manière One-To-One à l'entité Image
  • Ligne 9. Un persit(Entité Advert) entraine automatiquement un persiste sur l'entité Image
  • Ligne 10. l'Entité image est obligatoire. On ne peut pas avoir un Advert sans image

Doctrine - Relation One-To-One

Peut-on utiliser en même temps sur l'attribut d'une entité, l'annotation OneToOne(...) et l'annotation Column(...)?

Non


Doctrine - Relation One-To-One

Dans l'entité propriétaire, que doit-on ajouter à cette annotation située au dessus de l'attribut inverse pour qu'un remove(Entité Propriétaire) entraine aussi la suppréssion de l'entité inverse?

 

OneToOne(targetEntity="FQCN_entité_inverse")

cascasde={''remove''}

OneToOne(targetEntity="FQCN_entité_inverse", cascasde={"remove"})


Commentez le ''cascade'' de la ligne 9

Un persist(EntitéAdvert) entrainera un persite sur l'entité Image

Un remove(EntitéAdvert) entrainera un remove de l'entité Image


Peut-on liéer deux entités en One-To-One avec les étapes suivantes?
  1. Créer l'entité A propriétaire en ligne de commande
  2. Créer l'entité B inverse en ligne de commande
  3. Ajouter manuellement dans l'entité A l'attribut qui représente l'entité B
  4. Ajouter manuellement dans l'entité A les annotations nécessaires au dessus de l'attribut qui représente l'entité B
  5. Lancer >php bin/console doctrine:generate:entities NomBundle:EntitéA
  6. Lancer >php bin/console doctrine:schema:update --dump-sql
  7. Lancer >php bin/console doctrine:schema:update --force

Oui

L'Etape 5 permet de mettre à jour les getters et setters dans l'entité A aprés avoir ajouté l'attribut de l'étape 3

Les étapes 6 et 7 permettent de mettre à jour le schéma de la base de données.


Doctrine

Une relation One-To-One entre deux entités A et B est-elle par défaut facultative?

Oui

Cela veut dire que l'on peut avoir une entité A sans entité B

Cette relation peut-être rendue obligatoire avec l'ajout de la bonne annotation


Que contiendra l'attribut $image?

Une instance de la classe OC\PlatformBundle\Entity\Image


Comment lier l'entité Advert à l'entité Image avec un setter?

$advert->setImage($image)

 

$advert est une instance de l'entité Advert

$image est une instance de l'entité Image

 


Doctrine

Qu'est-ce qu'une relation Many-To-One entre deux entités?

C'est lorsqu'une entité A à plusieurs entités B

et

que l'entité B ne peut appartenir qu'à une entité A


Doctrine

Dans l'entité propriétaire, quelle annotation doit-on placer au dessus de l'attribut qui représente l'entité inverse, pour créer une relation ManyToOne?

ManyToOne(targetEntity="FQCN_entité_inverse")


Doctrine

Dans une relation ManyToOne, quelle est l'entité qui sera systématiquement propriétaire?

C'est l'entité qui est du côté Many.

Si l'on a plusieurs entités Ville pour une entité Pays alors l'entité Ville sera l'entité propriétaire


Doctrine - Commentez cette instruction de contrôleur

Application est l'entité propriétaire liée à l'entité inverse Advert par une relation Many-To-Many. $em est le manageur d'entités.

On utilise le Manageur d'Entités pour récupérer le repository de l'entité Application.

Puis on utilise la méthode findBy() afin de récupérer toutes les Applications qui sont liées à l'entité Advert.


Doctrine

Dans une relation ManyToOne bidirectionnelle, l'Entité Propriétaire est-elle celle qui est du côté Many?

Oui


Doctrine

Dans une relation ManyToOne bidirectionnelle, l'Entité Inverse est-elle celle qui est du côté One?

Oui


Doctrine: Relation bidirectionnelle OneToOne, OneToMany ou ManyToMany

L'Attribut "mappedBy" est utilisé dans l'Entité Propriétaire ou Inverse?

Dans l'Entité Inverse


Doctrine: Relation bidirectionnelle OneToOne, OneToMany ou ManyToMany

L'Attribut "inversedBy" est utilisé dans l'Entité Propriétaire ou Inverse?

Dans l'Entité Propriétaire


Doctrine - Vrai ou Faux

L'Option "mappedBy" spécifie le nom de la propriété dans la Target entité qui est le côté propriétaire de cette relation.

Vrai


Doctrine - Vrai ou Faux

L'Attribut "inversedBy" désigne le champs dans l'entité qui est le côté inverse de la relation.

Vrai


Ces étapes sont-elles utilisées pour une Entité A Parente d'une relation ManyToOne Bidirectionnelle?
  • Créer l'entité A propriétaire en ligne de commande
  • Ajouter l'attribut qui représente l'entité B
  • Annoter l'attribut de l'entité B avec ManyToOne, targetEntity et inversedBy
  • Définir l'entité B comme la "targetEntity"

Oui


Ces étapes sont-elles utilisées pour une Entité B inverse d'une relation ManyToOne Bidirectionnelle?
  • Créer l'entité B inverse en ligne de commande
  • Ajouter l'attribut qui représente l'entité A
  • Annoter l'attribut de l'entité A avec OneToMany, targetEntity et mappedBy
  • Définir l'entité A comme la "targetEntity"
  • Use Doctrine\Common\Collections\ArrayCollection
  • Définir le __construct pour que l'attribut de l'entité A soit un ArrayCollection

Oui


Dans une relation OneToMany Bidirectionnelle

si l'on fait

$country->addCity($city)

Faut-il faire?

$city->setCountry($country)

 

Oui

Dans une relation bidirectionnelle il faut lier les deux entités

La bonne manière de faire est de modifier une des deux méthodes addCity() ou setCountry() afin de faire appel à l'autre méthode depuis l'autre.

Si on modifie addCity() alors on devra utiliser cette méthode et plus l'autre.


Humour

Que doit crier une mère à son enfant accro à l'informatique pour qu'il passe à table?

ALT TAB