在模型中,我得到了一个包含3个参数$query
,$sort_by
和$sort_dir
的范围函数,我可以在连接函数之前访问它们,但出于某种原因,我不能访问连接函数。
为什么呢?我错过了什么吗?
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');
}
答案 0 :(得分:7)
您需要使用use
关键字:
return $query->join('product_translations', function($q) use ($sort_dir)
<强>解释强>
这是anonymous function。因此,变量在该函数内失去其范围。您需要使用PHP中的use
答案 1 :(得分:1)
您需要将参数传递给匿名函数,只传递$q
,除非使用use($var)
传递给函数,否则无法在函数内部看到任何变量
答案 2 :(得分:1)
如果要使用函数中的变量,这是变量定义的另一个范围,则必须使用use
语句:
return $query->join('product_translations', function($q) use ($sort_dir)
答案 3 :(得分:1)
使用use
关键字在您的功能中访问它们