Passer des variables dans Laravel Advanced Where Closures
La documentation Laravel fournit un exemple d'utilisation de WhereExists avec une fermeture pour joindre des tables :
DB::table('users') ->whereExists(function($query) { $query->select(DB::raw(1)) ->from('orders') ->whereRaw('orders.user_id = users.id'); }) ->get();
Mais que se passe-t-il si vous devez transmettre une variable externe dans la fermeture, comme une recherche requête ?
->where('city_id', '=', $this->city->id) ->where(function($query) { $query->where('name', 'LIKE', '%'.$searchQuery.'%') ->orWhere('address', 'LIKE', '%'.$searchQuery.'%') })
La solution actuelle consiste à créer une nouvelle propriété et à y accéder en utilisant $this, mais existe-t-il un moyen plus pratique ?
Oui, vous pouvez utiliser le mot-clé use pour passer les variables de la portée parent dans la fermeture :
DB::table('users')->where(function ($query) use ($activated) { $query->where('activated', '=', $activated); }) ->get();
En PHP 7.4, vous pouvez utiliser la fonction flèche plus courte syntaxe :
DB::table('users')->where(fn($query) => $query->where('activated', '=', $activated)) ->get();
Différences clés entre les fonctions fléchées et les fermetures régulières :
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!