无法访问函数内部的变量

Tro*_*yer 1 php function laravel laravel-5

在模型中我得到了一个带有3个参数的作用域函数$query,$sort_by并且$sort_dir,我可以在join函数之前访问它们,但由于某种原因我无法在join函数内部访问它们.

为什么?我错过了什么吗?

public function scopeOrder($query, $sort_by=false, $sort_dir='ASC'){

    if(!$sort_by)
        return $query;

    var_dump($sort_dir); //prints 'ASC'

    return $query->join('product_translations', function($q){

        var_dump($sort_dir); //variable undefined <----- ERROR

        $q->on('product_products.id', '=', 'product_translations.product_id')->where('product_translations.locale', '=', 'de');

    })->select('product_products.*')->orderBy('product_translations.name');

}
Run Code Online (Sandbox Code Playgroud)

Tha*_*lan 7

您需要使用use关键字:

return $query->join('product_translations', function($q) use ($sort_dir)
Run Code Online (Sandbox Code Playgroud)

说明:

这是一个匿名函数.因此,变量在该函数内失去其范围.您需要use在PHP中使用该函数的变量