【问题标题】:Call to undefined method Illuminate\Database\Query\Builder::map() in laravel 5.4在 laravel 5.4 中调用未定义的方法 Illuminate\Database\Query\Builder::map()
【发布时间】:2017-05-15 12:37:20
【问题描述】:

我的产品负责人:

 public function category(Request $request, $name, $main){
          if($request->data){
            $explode_id = array_map('intval', explode(',', $request->data));
            $category_id = Category::where('name', $name)->value('id');
            if($category_id == "")
            {
              $all_categories_id = Category::pluck('id');
            }
            else
            {
            $all_categories_id = Category::where('parent_id', $category_id)->pluck('id');
            $all_categories_id->push($category_id);
            }
            $product_id = Product::where('name', 'like','%'.$main.'%')->whereIn('id', $explode_id)->pluck('id');
            $id = ProductCategory::whereIn('product_id', $product_id)->whereIn('category_id', $all_categories_id)->pluck('id');
            $products = Product::find($id); 
          }
          else{
              $category_id = Category::where('name', $name)->value('id');
              if($category_id == "")
              {
                $all_categories_id = Category::pluck('id');
              }
              else
              {
              $all_categories_id = Category::where('parent_id', $category_id)->pluck('id');
              $all_categories_id->push($category_id);
              }
              $product_id = Product::where('name', 'like','%'.$main.'%')->pluck('id');
              $id = ProductCategory::whereIn('product_id', $product_id)->whereIn('category_id', $all_categories_id)->pluck('id');
              $products = Product::find($id);
          }    

            //Categories Name in Sidebar
            $category = ProductCategory::whereIn('product_id', $id)->pluck('parent_id');
            $category_name = Category::whereIn('id', $category)->pluck('name');

            //Categories Name in dropdown
            $main_categories = Category::where('parent_id', '0')->pluck('name'); 

            $user = Auth::user();
            $directory = 'uploads/users/images/'.$user->id;
            $main_categories = Category::where('parent_id', '0')->pluck('name');
            if (is_dir($directory)) {
            $files = scandir ($directory);
            $img_file = $directory.'/'.$files[2];
            $user['front_img'] = $img_file;
            }
            $profile = $user['front_img'];
            //Product Image Mapping     
            $products->map(function ($product) {
            $directory = 'uploads/products/images/'.$product->id;
            $brand = Brand::select('name')->where('id', '=', $product->brand)->pluck('name');
            $brand_name = $brand->first(function($value, $key) {
              return $key == 'name';
            });
            if (is_dir($directory)) {
              $files = scandir ($directory);
              $img_file = $directory.'/'.$files[2];
              $product['front_img'] = $img_file;
              $product['brand'] = $brand_name;
              return $product;
            }
              return $product;
            });

          return view('pages/product', compact('main_categories', 'profile', 'products', 'name', 'category_name'));
        }

这是我的产品控制器中的代码当我尝试运行此代码时,它在此处显示错误,我使用 map() 映射产品图像并将其显示为我的视图,但为什么会出现此错误..请任何人帮助我。 .

【问题讨论】:

  • Dude.... 请考虑一些严肃的重构(也许还有一些 PSR-2 指南)。这会很明显,例如$products 你试图运行 map() 是一个单一的 Model 而不是 Collection (你会期望给定变量名......)。

标签: php laravel-5.4


【解决方案1】:

那是因为map() 不存在。

$products = Product::find($id);

只是缩写

$products = Product::where('id', $id)->first();

所以你只会得到一个Product 模型回来。然后您尝试在其上调用map(),它仅存在于Collections 上,如果结果包含多个数据集/模型则返回。但你明确要求一个。所以你得到Illuminate\Database\Eloquent\Model 作为回应,然后尝试打电话给map()。由于该方法不存在,Laravel 尝试推迟到 Illuminate\Database\Query\Builder,如果在那里没有找到该方法,它会用上面提到的 Exception 进行轰炸。

所以:$products只有一个,不用映射,直接使用即可。此外,如果您将其称为 $product 而不是 $products,这将更加清楚。

【讨论】:

    猜你喜欢
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2014-02-25
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    相关资源
    最近更新 更多