我想在laravel中将变量传递给wherehas,但是得到一个未定义变量的错误, 在方法中,如果有自然然后去哪里有自然等于$ catname ... 在线号4
public function Products($catname,Request $request) //Product Category Pages
{
$natures = Nature::where('nature_slug', '=', $catname)
->first();
if($natures)
{ //Where Clause Based On Products Nature
//dd($catname);
$maxproductscost = Product::selectRaw('MAX(ABS(price)) AS HighestPrice')
->whereHas('natures', function($q) use ($catname)
{
$q->where('nature_slug', '=', $catname);
})
->first();
$maxproductscost = ceiling($maxproductscost->HighestPrice, 100);
/*End - GEt Maximum cost of product*/
if($request->range){
$range = $request->range;
$pieces = explode(" ", $range);
$rangestart = $pieces['1'];
$rangeend = $pieces['4'];
}
$firstslidervalue = $request->range ? $rangestart : 0;
$secondslidervalue = $request->range ? $rangeend : $maxproductscost;
$sorting = $request->sorting ? $request->sorting : '';
$products = Product::whereHas('natures', function($q)
{
$q->where('nature_slug', '=', $catname);
});
}
else
{
//Where Clause Based On Products Nature is General
/*GEt Maximum cost of product*/
$maxproductscost = Product::selectRaw('MAX(ABS(price)) AS HighestPrice')
->where('ptype', '=', $catname)
->whereHas('natures', function($q)
{
$q->where('nature_slug', '=', 'general');
})
->first();
$maxproductscost = ceiling($maxproductscost->HighestPrice, 100);
/*End - GEt Maximum cost of product*/
if($request->range){
$range = $request->range;
$pieces = explode(" ", $range);
$rangestart = $pieces['1'];
$rangeend = $pieces['4'];
}
$firstslidervalue = $request->range ? $rangestart : 0;
$secondslidervalue = $request->range ? $rangeend : $maxproductscost;
$sorting = $request->sorting ? $request->sorting : '';
$products = Product::where('ptype', '=', $catname)
->whereHas('natures', function($q)
{
$q->where('nature_slug', '=', 'general');
});
}
if($request->range){
$products->whereBetween('price', [$rangestart, $rangeend]);
}
if($sorting)
{
if($sorting == 'low')
{
$products->orderByRaw('(ABS(stock) > 0) desc, (case when ABS(stock) > 0 then ABS(price) end) asc, (case when ABS(stock) = 0 then ABS(price) end) asc ');
} else
{
$products->orderByRaw('(ABS(stock) > 0) desc, (case when ABS(stock) > 0 then ABS(price) end) DESC, (case when ABS(stock) = 0 then ABS(price) end) DESC ');
}
}
else
{
$products->orderByRaw('(ABS(stock) > 0) desc, (case when ABS(stock) > 0 then id end) DESC, (case when ABS(stock) = 0 then id end) DESC ');
}
$products = $products->paginate(12);
$user = Auth::user();
return view('products',compact('user','catname','products','maxproductscost','firstslidervalue','secondslidervalue','sorting'));
}
答案 0 :(得分:6)
要将变量传递给闭包,您必须使用use()函数
$products = Product::whereHas('natures', function($q) use($catname)
{
$q->where('nature_slug', '=', $catname);
});
答案 1 :(得分:0)
如果要在变量中提供字符串,请使用此代码
$catname = 'abc';
或声明abc常量
const abc = 123;