duancong2965
2016-06-12 18:28
浏览 145
已采纳

Laravel - 如何在匿名函数里面传递请求数据

So I want to get all items if the user hasn't selected any options, otherwise query the items according to the request data. However I can't pass the $request to my function. Here is my code:

public function showProducts(Request $request) 
{
       $products = Product::all();
       if(count($request->all()) != 0) {
                $products = Product::where(function($query) {
                    $minPrice = $request['min'] ? $request['min'] : null;
                    $maxPrice = $request['max'] ? $request['max'] : null;
                    $colors = $request['color'] ? $request['color'] : null;
                    $sizes = $request['size'] ? $request['size'] : null;

                    if($minPrice != null && $maxPrice != null) {
                        $query->where('price', '>=', $minPrice)->where('price', '<=', $maxPrice);
                    }

                    if($minPrice == null && $maxPrice == null && $colors == null && $sizes == null)  {

                    }
                })->get();
            }
}

Obviously I have $request in my showProducts closure however I can't access it inside my anonymous function inside where. How can I use my $request data in the anonymous function?

图片转代码服务由CSDN问答提供 功能建议

因此,如果用户未选择任何选项,我想获取所有项目,否则根据 请求数据。 但是我无法将 $ request 传递给我的函数。 这是我的代码:

  public function showProducts(Request $ request)
 {
 $ products = Product :: all(); 
 if(count($ request)  - &gt; all())!= 0){
 $ products = Product :: where(function($ query){
 $ minPrice = $ request ['min']?$ request ['min']:null  ; 
 $ maxPrice = $ request ['max']?$ request ['max']:null; 
 $ colors = $ request ['color']?$ request ['color']:null; 
 $  sizes = $ request ['size']?$ request ['size']:null; 
 
 if if($ minPrice!= null&amp;&amp; $ maxPrice!= null){
 $ query-&gt; where  ('price','&gt; =',$ minPrice) - &gt; where('price','&lt; =',$ maxPrice); 
} 
 
 if($ minPrice == null&amp;&amp;  ; $ maxPrice == null&amp;&amp; $ colors == null&amp;&amp; $ sizes == null){
 
} 
}) - &gt; get(); 
} 
} 
    
 
 

显然我的请求中有$ owProducts关闭但是我无法在 where 里面的匿名函数中访问它。 如何在匿名函数中使用我的$ request数据?

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douliang2935 2016-06-12 18:36
    已采纳

    You need to use the use keyword to pass in parameters from the parent scope:

    $products = Product::where(function($query) use ($request) {
        // $request is now available
    

    Now $request is available in your closure.

    See here: http://php.net/manual/en/functions.anonymous.php#example-200

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题