Doctrine, Composer dans le FrameWork Symfony 3
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.
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)
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
Quelle est le rôle de la méthode
detach('NomEntité')
du Manager d'Entités?
Annule le persist() de l'Entité.
Quelle est la différence entre ces deux méthodes du Manager d'Entités?
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é.
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()
Les repositories sont-ils un ensemble d'outils pour récupérer facilement les Entités?
Oui
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)
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()
ou
Peut-on récupérer le contenu d'une Entité à partir de la BDD en utilisant
Oui
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.
Commentez ce resultat obtenu avec
>php bin/console container:debug
Quelles sont les 4 types de relations entre Entités?
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
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 gère-t-il pour nous la création de la BDD, des tables et des relations entres tables?
Oui
Une relation entre deux entités peut-elle être à sens unique ou à double sens (bidirectionnelle)?
Oui
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
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
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
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")
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")
OneToOne(targetEntity="FQCN_entité_inverse", cascade={"persist"})
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?
Peut-on utiliser en même temps sur l'attribut d'une entité, l'annotation OneToOne(...) et l'annotation Column(...)?
Non
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")
OneToOne(targetEntity="FQCN_entité_inverse", cascasde={"remove"})
Un persist(EntitéAdvert) entrainera un persite sur l'entité Image
Un remove(EntitéAdvert) entrainera un remove de l'entité Image
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.
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
Une instance de la classe OC\PlatformBundle\Entity\Image
$advert->setImage($image)
$advert est une instance de l'entité Advert
$image est une instance de l'entité Image
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
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")
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
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.
Dans une relation ManyToOne bidirectionnelle, l'Entité Propriétaire est-elle celle qui est du côté Many?
Oui
Dans une relation ManyToOne bidirectionnelle, l'Entité Inverse est-elle celle qui est du côté One?
Oui
L'Attribut "mappedBy" est utilisé dans l'Entité Propriétaire ou Inverse?
Dans l'Entité Inverse
L'Attribut "inversedBy" est utilisé dans l'Entité Propriétaire ou Inverse?
Dans l'Entité Propriétaire
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
L'Attribut "inversedBy" désigne le champs dans l'entité qui est le côté inverse de la relation.
Vrai
Oui
Oui
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.
Que doit crier une mère à son enfant accro à l'informatique pour qu'il passe à table?
ALT TAB