Lors de l'utilisation de la fonction "with()" dans l'ORM Eloquent de Laravel pour récupérer les données associées à partir de plusieurs tables, vous pouvez rencontrer des situations dans lesquelles vous n'avez besoin que de colonnes spécifiques de la deuxième table. Cet article explique comment y parvenir sans recourir au générateur de requêtes.
Considérez le scénario dans lequel vous disposez de deux tables, « Utilisateur » et « Post », avec une relation un-à-plusieurs entre elles. Dans votre modèle User, vous définissez une relation "hasMany" avec le modèle Post :
public function post() { return $this->hasmany('post'); }
De même, dans le modèle Post, vous établissez une relation "belongsTo" avec le modèle User :
public function user() { return $this->belongsTo('user'); }
Cependant, lorsque vous utilisez la fonction "with()" pour joindre ces deux tables, vous remarquerez peut-être qu'elle sélectionne toutes les colonnes de la deuxième table par défaut. Supposons que vous souhaitiez uniquement récupérer des colonnes spécifiques, telles que « id » et « username », de la table « User ». L'extrait de code suivant ne suffira pas :
Post::query() ->with('user') ->get();
Pour atteindre votre objectif, vous pouvez passer une fonction de fermeture comme deuxième index du tableau passé à la fonction "with()" :
Post::query() ->with(['user' => function ($query) { $query->select('id', 'username'); }]) ->get()
Cette fermeture permet de préciser quelles colonnes récupérer de la deuxième table. Dans ce cas, il sélectionnera uniquement les colonnes "id" et "username" de la table "User".
Remarque : Comme mentionné dans la réponse, la clé primaire ("id " dans ce cas) doit être le premier paramètre de la méthode $query->select() pour garantir une récupération correcte des résultats.
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!