Maison >base de données >tutoriel mysql >Comment transmettre efficacement des variables dans les sous-requêtes « whereExists » de Laravel ?

Comment transmettre efficacement des variables dans les sous-requêtes « whereExists » de Laravel ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-16 08:34:12618parcourir

How to Efficiently Pass Variables into Laravel's `whereExists` Subqueries?

Passer des variables dans les Wheres avancés de Laravel

Dans Laravel, utiliser des sous-requêtes avec la méthode WhereExists peut être simple. Cependant, des défis surviennent lorsque des variables externes doivent être intégrées au processus de fermeture. L'utilisation de variables externes, telles que $this->city->id, peut rendre le code moins efficace.

Solution : Utiliser le mot-clé 'use'

Pour résoudre ce problème, le mot-clé use permet de transmettre les variables nécessaires dans la fermeture à partir de la portée parent. Cette approche permet une utilisation pratique de variables externes dans la fermeture.

Par exemple :

DB::table('users')
    ->where(function ($query) use ($activated) {
        $query->where('activated', '=', $activated);
    })
    ->get();

Mise à jour PHP 7.4 : fonctions fléchées

PHP 7.4 introduit les fonctions fléchées, une forme plus concise de fonctions anonymes. Cela fournit un moyen encore plus simplifié de transmettre des variables dans des fermetures.

Voici un exemple utilisant des fonctions fléchées dans PHP 7.4 :

DB::table('users')
    ->where(fn($query) => $query->where('activated', '=', $activated))
    ->get();

Par rapport à la syntaxe normale, les fonctions fléchées présentent les différences suivantes :

  • Ils utilisent le mot-clé fn au lieu de la fonction.
  • Ils capturent toutes les variables du parent scope automatiquement, éliminant ainsi le besoin du mot-clé use.
  • Ils renvoient toujours une valeur, ce qui rend impossible les déclarations de type de retour void.
  • Ils doivent omettre le mot-clé return.
  • Ils doit être défini comme une expression unique, limitant les fonctions multilignes mais permettant le chaînage de méthodes.

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