Laravel передает переменную туда, где есть запрос

Я хочу передать переменную туда, где есть запрос в laravel.. но получаю ошибку неопределенной переменной. В методе, если она имеет природу, перейдите туда, где она имеет природу, равную $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'));
}

введите здесь описание изображения


person Manish Arora    schedule 12.08.2016    source источник
comment
$catname = abc; должно быть $catname = 'abc';   -  person aldrin27    schedule 12.08.2016
comment
его динамическая переменная   -  person Manish Arora    schedule 12.08.2016
comment
его неопределенная переменная   -  person Manish Arora    schedule 12.08.2016
comment
Это должно работать нормально. Покажите нам полный код   -  person ntzm    schedule 12.08.2016
comment
проверьте приведенный выше код... я обновил код..   -  person Manish Arora    schedule 12.08.2016


Ответы (2)


Чтобы передать переменную в закрытие, вы должны использовать функцию use()

$products = Product::whereHas('natures', function($q) use($catname)
        {
            $q->where('nature_slug', '=', $catname);

        });
person Shivam Chawla    schedule 12.08.2016
comment
Вы не сделали этого в соответствии с этим заявлением $sorting = $request->sorting ? $request->sorting : ''; - person Shivam Chawla; 12.08.2016
comment
У вас дважды вызывается функция whereHas в коде. Вы использовали функцию use() в первый раз, а не во второй. - person Shivam Chawla; 12.08.2016
comment
зачем мне тернарный оператор, так как я передаю его из самой функции - person Manish Arora; 12.08.2016

Если вы хотите предоставить строку в переменной, используйте этот код

$catname = 'abc';

или объявить abc константой

const abc = 123;
person mishanon    schedule 12.08.2016
comment
его динамическая переменная - person Manish Arora; 12.08.2016
comment
Я имею в виду, что вы кодируете $catname = abc; неправильно. вы объявили abc константой? - person mishanon; 12.08.2016