Le chargement différé et le chargement hâtif en laravel

Le chargement différé et le chargement hâtif en laravel

Table of contents

Différences entre le chargement différé et le chargement hâtif
en Laravel, le chargement différé et le chargement hâtif font référence aux deux manières dont les modèles (Models) associés peuvent être chargés dans une requête de base de données. Dans cet article, nous apprendrons ce qu'est un chargement différé et hâtif et quand utiliser chacun d'eux.

Le Chargement différé

Le chargement différé est une technique dans laquelle les modèles associés ne sont pas chargés en même temps que le modèle principal, mais uniquement lorsqu'ils sont consultés pour la première fois. Cela signifie que les modèles associés ne sont chargés à partir de la base de données que lorsqu'ils sont nécessaires.

Le chargement différé est bénéfique lorsqu'il s'agit d'un grand nombre de modèles associés, car il peut aider à réduire la quantité de mémoire utilisée et à améliorer les performances de l'application. En Laravel, vous pouvez utiliser les méthodes belongsTo ou hasMany sur le modèle principal, suivies de la load() méthode, pour charger lentement (ou paresseusement ) un modèle associé.

Par exemple, supposons que vous ayez un model Article et un et un model Commentaire , où un article peut avoir de nombreux commentaires. Pour charger paresseusement les commentaires d'un article, vous pouvez utiliser le code suivant :

$article= App\Models\Article::find(1);
$commentaires = $articles->commentaires()->get();

Dans cet exemple, la méthode commentaires() renvoie un objet de relation, qui n'est pas chargé tant que la méthode get() n'est pas appelée. Cela vous permet d'accéder aux commentaires d'un article sans les charger à partir de la base de données jusqu'à ce qu'ils soient réellement nécessaires.

Une autre façon d'utiliser le chargement différé consiste à utiliser la méthode whenLoaded(), qui vous permet d'accéder à un modèle associé uniquement lorsqu'il a été chargé. Cela peut être utile lorsque vous traitez de nombreux modèles et que vous souhaitez vous assurer que seuls les modèles associés qui ont été chargés sont accessibles. Voici un exemple d'utilisation de la méthode whenLoaded()

$article= App\Models\Article::find(1);
$commentaires= $articles->commentaires()->whenLoaded('commentaires')->get();

Vous pouvez également utiliser la load()méthode directement sur une collection de modèles, pour charger paresseusement (différement) des modèles associés pour plusieurs modèles à la fois. Par exemple, si vous souhaitez charger les commentaires de tous les articles, vous pouvez utiliser le code suivant :

$articles = App\Models\Commentaire::all();
$articles->load('commentaires');

La fonctionnalité de chargement paresseux (différé) de Laravel est un outil puissant qui peut vous aider à améliorer les performances de votre application en réduisant la quantité de mémoire utilisée et le nombre de requêtes de base de données. Il peut être utilisé avec les relations et vous pouvez utiliser la méthode get () ou pour belongsTo charger la relation au moment souhaité. Il peut également être utilisé sur des collections de modèles. hasMany , hasOne, load(), whenLoaded()

Gardez à l'esprit que le chargement différé n'est utile que si la relation n'est pas utilisée dans tous les cas et que vous n'avez vraiment pas besoin d'obtenir cette relation tout le temps, sinon vous pouvez utiliser le chargement hâtif pour éviter une autre requête à la base de données et améliorer les performances .

Le Chargement hâtif

Le chargement anticipé ou hatif est une technique dans laquelle les modèles associés sont chargés en même temps que le modèle principal, en utilisant une requête supplémentaire dans la base de données. Cette approche peut être bénéfique lorsqu'il s'agit d'un petit nombre de modèles associés, car elle peut aider à éliminer le besoin de requêtes supplémentaires et à améliorer les performances de l'application.

En Laravel, vous pouvez utiliser la méthode with() sur le modèle principal, suivie du nom du modèle associé, pour charger avec impatience un modèle associé. La méthode with indique à Laravel d'inclure les modèles associés spécifiés dans la même requête que le modèle principal, afin qu'ils soient tous chargés en même temps.

Par exemple, disons que vous avez le même modèle Article et Commentaire. Pour charger avec impatience les commentaires d'un article, vous pouvez utiliser le code suivant :

$article= App\Models\Article::with('commentaires')->find(1);

Dans cet exemple, la méthode with() est utilisée pour inclure les commentaires de la publication dans la même requête que la publication elle-même. Cela vous permet d'accéder aux commentaires d'un article sans avoir à exécuter une requête supplémentaire pour les charger.

Vous pouvez également utiliser la méthode with() sur plusieurs modèles associés, en transmettant un tableau des modèles associés à la méthode :

$article= App\Models\Article::with(['commentaires', 'auteur'])->find(1);

Cela chargera l'article, ses commentaires et l'auteur en une seule requête.

Vous pouvez également utiliser la méthode with() sur une collection de modèles, pour charger rapidement des modèles associés pour plusieurs modèles à la fois. Par exemple, si vous souhaitez charger les commentaires de tous les articles, vous pouvez utiliser le code suivant :

$articles= App\Models\Article::with('commentaires')->get();

En plus de cela, Laravel vous permet également de spécifier des contraintes sur les relations chargées hâtives, en passant une fermeture à la méthode with() . Voici un exemple de la façon dont vous pouvez utiliser des contraintes pour charger des commentaires qui sont uniquement approuvés.

$article= App\Models\Article::with(['commentaires' => function($query){
 $query->where('approuve', true);
}])->find(1);

En conclusion, la fonctionnalité de chargement hâtif de Laravel est un outil puissant qui peut vous aider à améliorer les performances de votre application en éliminant le besoin de requêtes supplémentaires. Vous pouvez utiliser la méthode with() pour charger la relation dans la même requête que le modèle, et vous pouvez également utiliser des fermetures pour appliquer des contraintes sur la relation. Gardez à l'esprit que le chargement hâtif n'est pas le meilleur choix lorsque vous avez un grand nombre de modèles associés, dans ce cas, vous pouvez utiliser le chargement différé pour éviter de charger tous les modèles associés en même temps et utiliser efficacement la mémoire.

Le Conclusion

Que vous deviez utiliser le chargement différé ou le chargement hâtif dans votre application Laravel dépend du cas d'utilisation spécifique et du nombre de modèles associés que vous devez charger. Le chargement différé peut être plus efficace en termes de mémoire pour un plus grand nombre de modèles associés, et le chargement hâtif peut améliorer les performances lorsqu'il s'agit d'un petit nombre de modèles associés.

Did you find this article valuable?

Support Jocelin Kisenga by becoming a sponsor. Any amount is appreciated!