我有两个表,类别和产品。每个类别都有 id 和名称。每个产品都有 id、名称和类别 id。现在,当用户单击特定的category_id 时,我想在每个选项卡上加载数据。这样相关产品将显示在每个类别选项卡上。我已经尝试过,但无法得到解决方案。
类别模型:
class Category extends Model
{
public function products()
{
return $this->hasMany('App\Product');
}
}
产品型号:
class Product extends Model
{
public function category()
{
return $this->belongsTo('App\Category');
}
}
这是我的 Controller :
public function gettestItem() {
$categories = Category::with('products')->get();
return view('products', compact('categories'));
}
这是 View :
<div class="container">
<div id="content">
<ul id="tabs" class="nav nav-tabs" data-tabs="tabs">
@foreach ($categories as $category)
<li><a href="#{{$category->id}}" data-toggle="tab" >{{$category->name}}</a></li>
@endforeach
</ul>
<div id="my-tab-content" class="tab-content">
@foreach($categories as $category)
@foreach($category->products as $product)
<div class="tab-pane " id="{{$category->id}}">
{{$product->name}}
</div>
@endforeach
@endforeach
</div>
</div>
</div>
路线如下:
Route::get('/testItem',[
'uses'=>'ItemController@gettestItem',
'as'=>'testItem'
]);
如果有人能帮我解决这个问题,我将不胜感激。
如果您已正确定义架构和关系,则函数应如下所示:
public function gettestItem() {
$categories = Category::with('products')->get();
return view('products', compact('categories'));
}
然后您可以通过以下方式访问每个类别的产品:
foreach ($categories as $category) {
$category->product; // gives all products corresponding to $category
}
另请阅读 Docs
更新
你的第二个foreach
应该是:
<div id="my-tab-content" class="tab-content">
@foreach($categories as $category)
<div class="tab-pane" id="{{$category->id}}">
@foreach($category->products as $product)
<div>
{{$product->name}}
</div>
@endforeach
</div>
@endforeach
</div>
您还可以使用以下代码仅获取具有相应产品
的类别
:
$categories = Category::has('products')->with('products')->get();
我是一名优秀的程序员,十分优秀!