使用 Laravel 分隔页面上不同子类别中的产品
Separate products in different sub categories on the page with Laravel
我让管理员能够在子类别下创建多个类别。现在我想显示分配给类别的每个产品。
问题是每个子子类别都显示相同的产品。问题很可能出在数据库及其存储方式上,但我不确定具体在哪里
到目前为止这是我的控制器
public function showCategoryInfo($subcatId) {
$dual = DualSubCategories::where('sub_cat_id', '=', $subcatId)->get();
$dual_products = DualSubCategories::with('products')->findOrFail( $subcatId );
$subcat1 = SubCategories::with('products')->findOrFail( $subcatId );
return View::make('site.single_subcategory', [
'dual' => $dual,
'dual_products' => $dual_products
]);
}
这是我的观点
@foreach($dual as $dual_info)
<h3>{{ $dual_info['dual_sub_cat_name'] }}</h3>
<div class="row">
<div class="table-responsive">
<table class="table table-bordered">
<tbody>
@foreach($dual_products->products as $i => $product)
<tr>
<td>{{ $product['title'] }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@endforeach
这是我的模型
public function subcategory()
{
return $this->belongsTo('SubCategories', 'sub_cat_id');
}
public function products()
{
return $this->hasMany('Product', 'dual_sub_cat_id');
}
表格看起来像这样
// dual_category
dual_sub_cat_id sub_cat_id dual_sub_cat_name
1 1 test 1
2 1 test 2
// sub_category
sub_cat_id sub_cat_name
1 name 1
// products
product_id sub_cat_id dual_sub_cat_id
1 1 1
2 1 2
来自 table products
我在同一子类别中有 2 个产品,当我打开带有 sub_cat_id = 1 的子类别时,我想在页面
上看到
test 1
product_id 1
test 2
product_id 2
但我看到了
test 1
product_id 1
test 2
product_id 1
更新模型 DualSubCategories 模型
public function subcategory()
{
return $this->belongsTo('SubCategories', 'sub_cat_id');
}
public function products()
{
return $this->hasMany('Product', 'dual_sub_cat_id');
}
子类别模型
public function category()
{
return $this->belongsTo('Category', 'category_id');
}
public function products()
{
return $this->hasMany('Product', 'sub_cat_id');
}
产品型号
public function categories()
{
return $this->hasMany('Categories', 'category_id');
}
有些地方出了问题:
你做了一个循环和一个嵌套循环。上层循环第二次循环时,执行与第一次循环相同数据的内层循环。 $dual_products
不会更改第二次或第三次。不依赖上层循环
但这并不能解释为什么您会看到一种产品。在您的控制器中,您调用 $dual_products = DualSubCategories::with('products')->findOrFail( $subcatId );
。这会获取一个 (findOrFail) DualSubCategory,其 ID 为 SubCategory。这不会失败,因为您使用 sub_cat_id = 1
调用它,巧合的是,该 ID 存在于数据库中。
如果你的关系 set-up 正确,这应该有效:
控制器
<?php
$dual = DualSubCategories::where('sub_cat_id', $subcatId)->with('products')->get();
return View::make('site.single_subcategory', ['dual' => $dual]);
我们获取产品的 DualSubcategories eager-loaded 并将其分配给视图。
查看
@foreach($dual as $dual_info)
<h3>{{ $dual_info->dual_sub_cat_name }}</h3>
@foreach($dual_info->products as $i => $product)
{{ $product->title }}
@endforeach
@endforeach
在视图中,我们遍历 DualSubcategories 并显示名称。每次循环,我们都会遍历该 DualSubcategory 中的产品并显示它的标题。 (为清楚起见,我删除了您的格式)
我让管理员能够在子类别下创建多个类别。现在我想显示分配给类别的每个产品。
问题是每个子子类别都显示相同的产品。问题很可能出在数据库及其存储方式上,但我不确定具体在哪里
到目前为止这是我的控制器
public function showCategoryInfo($subcatId) {
$dual = DualSubCategories::where('sub_cat_id', '=', $subcatId)->get();
$dual_products = DualSubCategories::with('products')->findOrFail( $subcatId );
$subcat1 = SubCategories::with('products')->findOrFail( $subcatId );
return View::make('site.single_subcategory', [
'dual' => $dual,
'dual_products' => $dual_products
]);
}
这是我的观点
@foreach($dual as $dual_info)
<h3>{{ $dual_info['dual_sub_cat_name'] }}</h3>
<div class="row">
<div class="table-responsive">
<table class="table table-bordered">
<tbody>
@foreach($dual_products->products as $i => $product)
<tr>
<td>{{ $product['title'] }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@endforeach
这是我的模型
public function subcategory()
{
return $this->belongsTo('SubCategories', 'sub_cat_id');
}
public function products()
{
return $this->hasMany('Product', 'dual_sub_cat_id');
}
表格看起来像这样
// dual_category
dual_sub_cat_id sub_cat_id dual_sub_cat_name
1 1 test 1
2 1 test 2
// sub_category
sub_cat_id sub_cat_name
1 name 1
// products
product_id sub_cat_id dual_sub_cat_id
1 1 1
2 1 2
来自 table products
我在同一子类别中有 2 个产品,当我打开带有 sub_cat_id = 1 的子类别时,我想在页面
test 1
product_id 1
test 2
product_id 2
但我看到了
test 1
product_id 1
test 2
product_id 1
更新模型 DualSubCategories 模型
public function subcategory()
{
return $this->belongsTo('SubCategories', 'sub_cat_id');
}
public function products()
{
return $this->hasMany('Product', 'dual_sub_cat_id');
}
子类别模型
public function category()
{
return $this->belongsTo('Category', 'category_id');
}
public function products()
{
return $this->hasMany('Product', 'sub_cat_id');
}
产品型号
public function categories()
{
return $this->hasMany('Categories', 'category_id');
}
有些地方出了问题:
你做了一个循环和一个嵌套循环。上层循环第二次循环时,执行与第一次循环相同数据的内层循环。 $dual_products
不会更改第二次或第三次。不依赖上层循环
但这并不能解释为什么您会看到一种产品。在您的控制器中,您调用 $dual_products = DualSubCategories::with('products')->findOrFail( $subcatId );
。这会获取一个 (findOrFail) DualSubCategory,其 ID 为 SubCategory。这不会失败,因为您使用 sub_cat_id = 1
调用它,巧合的是,该 ID 存在于数据库中。
如果你的关系 set-up 正确,这应该有效:
控制器
<?php
$dual = DualSubCategories::where('sub_cat_id', $subcatId)->with('products')->get();
return View::make('site.single_subcategory', ['dual' => $dual]);
我们获取产品的 DualSubcategories eager-loaded 并将其分配给视图。
查看
@foreach($dual as $dual_info)
<h3>{{ $dual_info->dual_sub_cat_name }}</h3>
@foreach($dual_info->products as $i => $product)
{{ $product->title }}
@endforeach
@endforeach
在视图中,我们遍历 DualSubcategories 并显示名称。每次循环,我们都会遍历该 DualSubcategory 中的产品并显示它的标题。 (为清楚起见,我删除了您的格式)