在laravel 5.4中发现错误,此集合实例上不存在属性[categories]

时间:2017-02-28 03:39:08

标签: php laravel laravel-5 eloquent laravel-5.4

我正在尝试在产品的列表页面上显示产品列表。每个产品都有category.My表结构

categories
id  name  description
1   Cat1  Category 1
2   Cat2  Category 2

这是具有id name and description

的类别表
products
    id  name  description category_id
    1   pro1  product 1        1
    2   pro2  product 2        2

这是具有category_id的产品表。

Product Model
    public function categories() {        
            return $this->belongsTo("App\Category");
        }

这是产品属于类别

的产品型号
Category Model
         public function products() {
        return $this->hasMany("App\Product");
    }

这是类别包含许多产品的类别模型

现在,在列表功能的产品控制器中,我想要具有类别名称

的产品列表
public function index()
    {
        $product = Product::with('categories')->get();
        print_r($product->categories);die;
        return view('product.index')->with("list",$product);
    }

我希望我的输出应该是

products
        id  name  description category name
        1   pro1  product 1        cat1
        2   pro2  product 2        cat2

我发现此错误"Property [categories] does not exist on this collection instance."

2 个答案:

答案 0 :(得分:2)

当你跑步时:

$product = Product::with('categories')->get();

您没有获得单一产品,而是获得所有产品,因此应将其重命名为:

$products = Product::with('categories')->get();

此外,查看您的数据库结构,每个产品属于单个类别,因此在Product模型中您应该重命名

public function categories() 
{        
    return $this->belongsTo("App\Category");
}

public function category() 
{        
    return $this->belongsTo("App\Category");
}

如果您进行此更改,则应再次更改

$products = Product::with('categories')->get();

 $products = Product::with('category')->get();

如果您的所有产品都设置了类别,请返回您的控制器,您可以这样显示:

foreach ($products as $product) 
{
   echo $product->id.' '.$product->name.' '.$product->description.' '.$product->category->name;
}

您可以在Blade视图中稍后执行相同操作:

@foreach ($list as $product) 
   {{ $product->id }} {{$product->name}} {{ $product->description }} {{ $product->category->name }}
@endforeach

答案 1 :(得分:0)

我已更改ProductController这是我的产品控制器功能

 public function index()
    {
        $products = Product::with('category')->get();        
        return view('product.index')->with("list",$products);
    }

在产品型号中也发生了变化

public function category() {
        return $this->belongsTo("App\Category");
    }

经过这些改变,我得到了预期的结果。