QCMUP.COM

Liste QCM Laravel CorrigĂ© – Partie 6

Entraßnez-vous avec des questions corrigées, progressez étape par étape, puis consolidez vos notions grùce aux définitions et explications.

30 questions RĂ©ponses expliquĂ©es RĂ©viser → Pratiquer
Liste QCM Laravel CorrigĂ© – Partie 6 – Laravel

L es relations entre modùles sont au cƓur du travail avec Eloquent, l’ORM de Laravel.

Elles permettent de reprĂ©senter fidĂšlement la structure d’une base de donnĂ©es tout en manipulant les donnĂ©es de façon intuitive, Ă  travers des objets.

Pour réussir en développement web, mais aussi en examen ou en entretien technique, il est essentiel de comprendre comment ces relations se définissent et comment elles impactent les performances.

Cette série de QCM se concentre sur les relations les plus courantes, comme les associations un-à-un, un-à-plusieurs ou plusieurs-à-plusieurs, ainsi que sur les bonnes pratiques de chargement des données liées.

Elle aborde aussi les mécanismes avancés qui rendent le code plus propre et plus efficace : préchargement, filtrage sur relations, gestion des tables intermédiaires et synchronisation.

L’objectif est d’aider l’apprenant Ă  raisonner comme un dĂ©veloppeur Laravel, avec des rĂ©flexes solides et une comprĂ©hension claire des enjeux.

QCM 1 Corrigé

Quelle méthode est utilisée pour définir une relation de type 'Un-à-Un' (One-to-One) dans le modÚle parent ?

A. hasOne()
B. belongsTo()
C. hasMany()
D. hasOneThrough()
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : A

Justification :
La méthode hasOne() indique que le modÚle possÚde exactement une instance liée dans une autre table.

QCM 2 Corrigé

Dans une relation 'Un-à-Plusieurs' (One-to-Many), quelle méthode utilise-t-on dans le modÚle enfant pour pointer vers le parent ?

A. hasMany()
B. belongsTo()
C. belongsToMany()
D. associate()
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : B

Justification :
belongsTo() définit l'inverse de la relation et se place dans le modÚle qui détient la clé étrangÚre.

QCM 3 Corrigé

Pour une relation 'Plusieurs-Ă -Plusieurs' (Many-to-Many), quelle mĂ©thode doit ĂȘtre dĂ©clarĂ©e dans les deux modĂšles concernĂ©s ?

A. hasMany()
B. manyToMany()
C. belongsTo()
D. belongsToMany()
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : D

Justification :
Cette méthode permet de lier deux modÚles via une table pivot intermédiaire.

QCM 4 Corrigé

Quel est l'objectif principal du 'Eager Loading' dans Laravel ?

A. Charger les données uniquement au moment de l'accÚs à la propriété.
B. RĂ©duire le nombre de requĂȘtes SQL en utilisant la mĂ©thode with().
C. Augmenter la sécurité des jointures SQL.
D. Supprimer automatiquement les relations orphelines.
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : B

Justification :
Le Eager Loading rĂ©sout le problĂšme des requĂȘtes N+1 en prĂ©chargeant les relations en une seule fois.

QCM 5 Corrigé

Quelle méthode permet de charger une relation aprÚs que le modÚle parent a déjà été récupéré ?

A. with()
B. get()
C. load()
D. attach()
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : C

Justification :
La méthode load() effectue un 'Lazy Eager Loading' sur une instance de modÚle existante.

QCM 6 Corrigé

Comment nomme-t-on la table intermédiaire utilisée dans une relation Many-to-Many ?

A. Table de jointure
B. Table pivot
C. Table de référence
D. Table esclave
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : B

Justification :
La table pivot contient les clés étrangÚres des deux modÚles liés.

QCM 7 Corrigé

Quelle méthode permet d'ajouter une entrée dans une table pivot sans créer de doublon ?

A. attach()
B. save()
C. sync()
D. toggle()
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : C

Justification :
sync() remplace les liaisons existantes par celles fournies, évitant ainsi les doublons.

QCM 8 Corrigé

Comment accéder aux colonnes supplémentaires d'une table pivot ?

A. ->withPivot('nom_colonne')
B. ->pivot('nom_colonne')
C. ->select('nom_colonne')
D. ->pivot->nom_colonne
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : A

Justification :
Il faut déclarer les colonnes extra lors de la définition de la relation avec withPivot().

QCM 9 Corrigé

Quelle mĂ©thode dĂ©finit une relation oĂč un modĂšle appartient Ă  plusieurs autres modĂšles sur une base de type 'morphique' ?

A. hasManyThrough()
B. morphedByMany()
C. morphToMany()
D. morphTo()
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : D

Justification :
morphTo() permet Ă  un modĂšle d'appartenir Ă  plus d'un type de modĂšle sur une seule association.

QCM 10 Corrigé

Dans une relation One-to-Many, comment récupérer uniquement les modÚles parents qui possÚdent au moins un enfant ?

A. Parent::with('enfants')->get()
B. Parent::has('enfants')->get()
C. Parent::whereHas('enfants')->get()
D. Les réponses 2 et 3 sont valides
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : D

Justification :
has() et whereHas() filtrent les résultats en fonction de l'existence de relations.

QCM 11 Corrigé

Quelle méthode permet de détacher tous les enregistrements d'une table pivot ?

A. detach() sans arguments
B. remove()
C. sync([])
D. Les réponses 1 et 3 sont valides
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : D

Justification :
Appeler detach() sans ID ou synchroniser un tableau vide vide la table pivot pour ce modĂšle.

QCM 12 Corrigé

Que fait la méthode 'withCount()' ?

A. Elle compte le nombre total de parents.
B. Elle ajoute un attribut 'relation_count' au résultat sans charger les modÚles liés.
C. Elle limite le nombre de relations chargées.
D. Elle vérifie si la table est vide.
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : B

Justification :
C'est une méthode performante pour obtenir le nombre d'enfants sans alourdir la mémoire.

QCM 13 Corrigé

Quelle méthode est utilisée pour les relations 'Un-à-Plusieurs' à travers un modÚle intermédiaire ?

A. hasManyThrough()
B. hasOneThrough()
C. belongsToThrough()
D. via()
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : A

Justification :
Elle permet d'accéder à des relations distantes (ex: Pays -> Utilisateurs -> Articles).

QCM 14 Corrigé

Par défaut, comment Laravel devine-t-il la clé étrangÚre d'un modÚle 'User' ?

A. ID_USER
B. user_id
C. user_pk
D. fk_user
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : B

Justification :
La convention est le nom du modĂšle en 'snake_case' suivi de '_id'.

QCM 15 Corrigé

Comment peut-on ordonner les résultats d'une relation directement dans la définition du modÚle ?

A. En ajoutant ->orderBy() aprÚs la méthode de relation.
B. Ce n'est pas possible, il faut le faire dans le contrĂŽleur.
C. En utilisant la propriété $sort.
D. En modifiant la migration.
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : A

Justification :
Les relations Eloquent retournent des instances de constructeur de requĂȘte.

QCM 16 Corrigé

Quelle méthode permet d'ajouter un nouvel enregistrement lié sans spécifier manuellement l'ID du parent ?

A. insert()
B. create() sur la relation
C. save() sur la relation
D. Les réponses 2 et 3 sont valides
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : D

Justification :
$parent->enfants()->create($data) lie automatiquement le nouvel enfant au parent.

QCM 17 Corrigé

Que se passe-t-il si vous accédez à une relation sans utiliser 'with()' ou 'load()' ?

A. Laravel génÚre une erreur.
B. Il utilise le 'Lazy Loading' (une requĂȘte SQL par accĂšs).
C. Il retourne null.
D. Il charge toutes les tables de la base de données.
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : B

Justification :
C'est le comportement par défaut, mais cela peut causer des problÚmes de performance.

QCM 18 Corrigé

Quelle méthode de pivot permet d'inverser l'état d'une liaison (ajouter si absent, retirer si présent) ?

A. switch()
B. toggle()
C. syncWithoutDetaching()
D. reverse()
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : B

Justification :
toggle() est trÚs pratique pour des fonctionnalités comme les 'likes' ou les 'abonnements'.

QCM 19 Corrigé

Dans une relation morphique, quelles colonnes sont nécessaires par défaut sur la table ?

A. id et type
B. nom_id et nom_type
C. morph_id et morph_type
D. L'ID suffit.
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : B

Justification :
Le suffixe '_id' stocke la clé et '_type' stocke le nom de la classe du modÚle lié.

QCM 20 Corrigé

Comment charger une relation tout en appliquant un filtre (ex: uniquement les commentaires approuvés) ?

A. Parent::with(['commentaires' => function($q) { $q->where('approuve', true); }])
B. Parent::with('commentaires')->where('approuve', true)
C. Parent::filter('commentaires', 'approuve')
D. Ce n'est pas possible en une seule requĂȘte.
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : A

Justification :
On peut passer un tableau avec une fonction anonyme Ă  with() pour personnaliser le chargement.

QCM 21 Corrigé

Quelle méthode de relation est utilisée pour un profil utilisateur qui n'appartient qu'à un seul compte ?

A. hasOne()
B. belongsTo()
C. hasMany()
D. isLinkedTo()
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : A

Justification :
hasOne() définit une relation 1:1 du cÎté de la table qui ne possÚde pas la clé étrangÚre.

QCM 22 Corrigé

Laquelle de ces affirmations sur 'syncWithoutDetaching()' est vraie ?

A. Elle supprime toutes les anciennes liaisons.
B. Elle ajoute les nouveaux IDs sans toucher aux liaisons existantes.
C. Elle renomme la table pivot.
D. Elle ne fonctionne que pour les relations One-to-One.
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : B

Justification :
Contrairement à sync(), elle ne détache pas les IDs absents du tableau fourni.

QCM 23 Corrigé

Comment s'appelle le concept oĂč Eloquent met Ă  jour le champ 'updated_at' du parent quand un enfant est modifiĂ© ?

A. Parent Update
B. Touching Timestamps
C. Cascade Update
D. Relational Sync
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : B

Justification :
On utilise la propriété protected $touches = ['relation'] dans le modÚle enfant.

QCM 24 Corrigé

Quelle méthode permet de vérifier si une relation est chargée en mémoire ?

A. isLoaded()
B. relationLoaded()
C. hasLoaded()
D. checkRelation()
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : B

Justification :
Cela permet d'Ă©viter de redĂ©clencher une requĂȘte si les donnĂ©es sont dĂ©jĂ  lĂ .

QCM 25 Corrigé

Peut-on dĂ©finir une relation Many-to-Many qui pointe vers la mĂȘme table (ex: amis d'un utilisateur) ?

A. Non, il faut deux tables différentes.
B. Oui, c'est une relation réflexive (Self-referencing).
C. Oui, mais seulement avec une DTD.
D. Seulement dans Laravel Pro.
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : B

Justification :
Il suffit de spécifier le nom de la table pivot et les clés étrangÚres manuellement.

QCM 26 Corrigé

Quelle méthode permet de récupérer le premier enregistrement d'une relation Many-to-Many ?

A. $model->relation->first()
B. $model->relation()->first()
C. Les deux sont identiques en termes de performance.
D. La rĂ©ponse 2 est plus performante car elle ajoute LIMIT 1 Ă  la requĂȘte SQL.
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : D

Justification :
Appeler la mĂ©thode avec () permet de continuer Ă  construire la requĂȘte SQL avant l'exĂ©cution.

QCM 27 Corrigé

Comment forcer la suppression des enfants lorsqu'un parent est supprimé via Eloquent ?

A. En utilisant les événements de modÚle (deleting) ou les clés étrangÚres SQL 'ON DELETE CASCADE'.
B. C'est automatique dans Laravel.
C. En mettant $deleteChildren = true.
D. En utilisant la méthode flush().
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : A

Justification :
Eloquent ne gÚre pas les suppressions en cascade automatiquement sans instructions spécifiques.

QCM 28 Corrigé

Que renvoie une relation 'hasMany()' si aucun enfant n'est trouvé ?

A. null
B. Une erreur 404
C. Une collection vide
D. false
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : C

Justification :
Les relations multiples retournent toujours un objet Collection, mĂȘme s'il ne contient rien.

QCM 29 Corrigé

Quelle méthode permet de charger des relations imbriquées (ex: charger les auteurs des commentaires d'un article) ?

A. with('commentaires.auteur')
B. with('commentaires', 'auteur')
C. with('commentaires->auteur')
D. loadDeep('auteur')
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : A

Justification :
La notation par point permet de traverser les niveaux de relations dans with().

QCM 30 Corrigé

Quelle est la limite de 'whereHas()' sur de trÚs grosses bases de données ?

A. Elle ne fonctionne pas avec MySQL.
B. Elle peut ĂȘtre lente car elle gĂ©nĂšre souvent une sous-requĂȘte 'EXISTS'.
C. Elle ne peut pas filtrer par date.
D. Elle désactive le cache.
Afficher la réponse Cliquez pour voir la correction

Réponse correcte : B

Justification :
Pour de trĂšs gros volumes, des jointures manuelles (join) peuvent parfois ĂȘtre plus performantes.

Mots & Définitions
Consultez les définitions des termes importants.

Une relation One-to-One relie un enregistrement parent à un seul enregistrement enfant. Elle sert à séparer des informations dans deux tables tout en gardant un lien direct et unique.

Une relation One-to-Many signifie qu’un parent peut possĂ©der plusieurs enfants. C’est un modĂšle trĂšs courant, par exemple un article avec plusieurs commentaires.

Une relation Many-to-Many relie plusieurs enregistrements d’un modĂšle Ă  plusieurs d’un autre. Elle nĂ©cessite une table intermĂ©diaire pour stocker les associations entre les deux cĂŽtĂ©s.

belongsTo() dĂ©crit le cĂŽtĂ© « enfant » d’une relation, celui qui pointe vers le parent. Elle indique que le modĂšle courant dĂ©pend d’un autre modĂšle via une clĂ© Ă©trangĂšre.

hasOne() dĂ©finit une relation oĂč un modĂšle parent possĂšde un seul modĂšle liĂ©. Elle est utile quand on veut garder une structure claire, tout en sĂ©parant les donnĂ©es dans des tables diffĂ©rentes.

L’Eager Loading consiste Ă  charger les relations en mĂȘme temps que le modĂšle principal. L’objectif est d’éviter une multiplication de requĂȘtes et d’amĂ©liorer les performances.

Le Lazy Loading charge une relation seulement au moment oĂč on y accĂšde. C’est pratique, mais cela peut provoquer beaucoup de requĂȘtes si l’on parcourt une liste d’élĂ©ments liĂ©s.

with() permet de demander Ă  Eloquent de prĂ©charger certaines relations lors de la rĂ©cupĂ©ration des modĂšles. Elle est particuliĂšrement utile pour limiter le nombre de requĂȘtes SQL.

load() sert Ă  charger une relation aprĂšs avoir dĂ©jĂ  rĂ©cupĂ©rĂ© le modĂšle principal. C’est une solution simple quand on dĂ©cide plus tard d’afficher ou d’exploiter des donnĂ©es liĂ©es.

La table pivot est la table intermédiaire utilisée pour gérer une relation Many-to-Many. Elle contient au minimum les clés étrangÚres des deux modÚles et peut aussi stocker des informations supplémentaires.

attach() ajoute une liaison entre deux modĂšles dans une relation Many-to-Many. Elle crĂ©e une nouvelle ligne dans la table pivot correspondant Ă  l’association.

sync() synchronise une relation Many-to-Many avec une liste d’identifiants fournie. Elle met Ă  jour la table pivot en ajoutant les liaisons manquantes et en supprimant celles qui ne sont plus prĂ©sentes.

syncWithoutDetaching() ajoute de nouvelles liaisons dans une relation Many-to-Many sans supprimer les anciennes. C’est utile pour enrichir une relation progressivement sans perdre l’existant.

withCount() ajoute au rĂ©sultat un compteur liĂ© Ă  une relation, sans charger les modĂšles associĂ©s. Cela permet d’obtenir rapidement un nombre d’élĂ©ments liĂ©s, tout en restant performant.

whereHas() filtre les modĂšles en fonction de l’existence de relations rĂ©pondant Ă  une condition. Sur de gros volumes, cette approche peut devenir coĂ»teuse car elle s’appuie souvent sur des sous-requĂȘtes.

À propos de ce QCM

L es notions évaluées dans ces QCM couvrent la maniÚre dont Eloquent modélise les liens entre données.

Comprendre les relations One-to-One et One-to-Many permet de structurer correctement les modĂšles et d’accĂ©der facilement aux informations associĂ©es.

Dans ce cadre, il est important de distinguer les rĂŽles : le parent « possĂšde » des donnĂ©es liĂ©es, tandis que l’enfant « appartient » au parent, gĂ©nĂ©ralement via une clĂ© Ă©trangĂšre.

Laravel facilite ces liens par des méthodes dédiées, ce qui rend le code plus expressif et moins sujet aux erreurs.

Les relations Many-to-Many introduisent une couche supplémentaire : la table pivot.

Elle joue un rÎle central pour stocker les associations et, souvent, des informations complémentaires.

Savoir ajouter, synchroniser ou inverser des liaisons est essentiel lorsqu’on gĂšre des fonctionnalitĂ©s comme des tags, des rĂŽles, des abonnements ou des relations sociales.

Un autre thĂšme majeur concerne les performances.

Le Lazy Loading peut sembler pratique, mais il devient rapidement problĂ©matique lorsqu’on affiche des listes avec des relations, car il multiplie les requĂȘtes.

À l’inverse, l’Eager Loading permet de prĂ©charger les donnĂ©es nĂ©cessaires et d’éviter les piĂšges classiques du “trop de requĂȘtes”.

Les mĂ©thodes de comptage et de filtrage sur relations complĂštent cet ensemble, en offrant des moyens efficaces d’extraire des informations pertinentes sans charger inutilement de donnĂ©es.

En travaillant ces QCM, l’apprenant dĂ©veloppe une comprĂ©hension structurĂ©e d’Eloquent, amĂ©liore sa capacitĂ© Ă  optimiser ses requĂȘtes et renforce sa prĂ©paration pour des cas rĂ©els, des projets ou des Ă©valuations.

Conclusion

M aĂźtriser les relations Eloquent, c’est gagner en clartĂ©, en efficacitĂ© et en fiabilitĂ© dans ses projets Laravel.

Ces QCM permettent de consolider les bases tout en intĂ©grant des rĂ©flexes essentiels, notamment sur la gestion des tables intermĂ©diaires et l’optimisation du chargement des donnĂ©es.

En s’entraĂźnant rĂ©guliĂšrement, l’utilisateur affine son raisonnement, identifie plus vite les bonnes mĂ©thodes et Ă©vite les erreurs frĂ©quentes qui coĂ»tent cher en performance.

Cette progression renforce durablement la compréhension du framework et prépare à des développements plus complexes avec une vraie approche professionnelle.

↑