Maison >développement back-end >tutoriel php >Comment sélectionner des colonnes spécifiques à partir de tables associées à l'aide de la fonction « with() » d'Eloquent ?

Comment sélectionner des colonnes spécifiques à partir de tables associées à l'aide de la fonction « with() » d'Eloquent ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-26 07:28:31191parcourir

How to Select Specific Columns from Related Tables Using Eloquent's `with()` Function?

Récupération de colonnes spécifiques à partir de tables associées avec la fonction "With()" d'Eloquent

Lors de l'exécution de jointures à l'aide de la fonction "with()" d'Eloquent, il est possible de récupérer des colonnes spécifiques de la ou des tables associées. Ceci est utile dans les scénarios où seul un sous-ensemble de colonnes est requis à partir de la table jointe.

Problème :

Considérez un scénario avec deux tables, User et Post, où un utilisateur peut avoir plusieurs publications et chaque publication appartient à un seul utilisateur.

Initial Approche :

En utilisant la syntaxe par défaut "with('user')", les requêtes suivantes sont exécutées :

select * from `posts`
select * from `users` where `users`.`id` in (<1>, <2>)

Cependant, si seules des colonnes spécifiques sont requises à partir du " users", telle que "id" et "username", l'approche ci-dessus ne suffira pas.

Solution I : Utiliser un tableau comme Deuxième argument dans "with()":

Passer un tableau comme deuxième argument dans "with()" vous permet de spécifier les colonnes à récupérer de la table associée. Cependant, cette approche ne fonctionne que pour spécifier les colonnes de la première table.

Solution II : Utiliser une fermeture comme deuxième argument dans "with()":

Pour récupérez des colonnes spécifiques de la deuxième table, utilisez une fonction de fermeture comme deuxième argument dans le tableau "with()". Cette technique vous permet d'implémenter une logique personnalisée pour la sélection des colonnes.

Post::query()
    ->with(['user' => function ($query) {
        $query->select('id', 'username');
    }])
    ->get()

Avec cette approche, les requêtes suivantes sont exécutées :

select * from `posts`
select id, username from `users` where `users`.`id` in (<1>, <2>)

Remarque : Le principal La clé de la table associée ("id" dans cet exemple) doit être le premier paramètre dans $query->select() pour récupérer les résultats souhaités.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn