我正在尝试在产品的列表页面上显示产品列表。每个产品都有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."
答案 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");
}
经过这些改变,我得到了预期的结果。