Php Laravel,其中向函数传递附加参数

Php Laravel,其中向函数传递附加参数,php,laravel,arguments,closures,Php,Laravel,Arguments,Closures,以下明显导致变量未定义 public function show($locale, $slug) { $article = Article::whereHas('translations', function ($query) { $query->where('locale', 'en') ->where('slug', $slug); })->first(); return $article; } 尝试向函数提供$slug变量: public functi

以下明显导致变量未定义

public function show($locale, $slug)
{
 $article = Article::whereHas('translations', function ($query) {
 $query->where('locale', 'en')
  ->where('slug', $slug);
 })->first();

   return $article;
}
尝试向函数提供$slug变量:

public function show($locale, $slug)
{
    $article = Article::whereHas('translations', function ($query, $slug) {
        $query->where('locale', 'en')
        ->where('slug', $slug);
    })->first();

    return $article;
}
导致

Missing argument 2 for App\Http\Controllers\ArticlesController::App\Http\Controllers\{closure}()
您如何允许函数访问$slug?
现在这可能很简单,但我找不到需要搜索的内容。

您必须使用
use
将变量(在您的情况下,
$slug
)传递到闭包中(称为):

如果将来要将
$locale
与它一起传递,只需用逗号分隔它:

Article::whereHas('translations', function ($query) use ($slug, $locale) { /* ... */ });

您需要从父范围继承变量:

public function show($locale, $slug) {

    $article = Article::whereHas('translations', function ($query, $slug) use ($slug){
        $query->where('locale', 'en')
        ->where('slug', $slug);
    })->first();

    return $article;
}
闭包也可以从父范围继承变量。任何这样的变量都必须传递给use-language构造


从这里开始:

我知道事情会很简单。谢谢@rdiz,如何使用
when()
传递多个参数,或者我们必须为laravel中的两个参数编写
when()
2次?
public function show($locale, $slug) {

    $article = Article::whereHas('translations', function ($query, $slug) use ($slug){
        $query->where('locale', 'en')
        ->where('slug', $slug);
    })->first();

    return $article;
}