使用Laravel在页面上的不同子类别中分离产品

时间:2016-09-30 12:08:50

标签: php mysql laravel-4.2

我已经让管理员能够在子类别下创建多个类别。现在我想显示分配给类别的每个产品。

问题是每个子子类别都显示相同的产品。最有可能的问题在于数据库及其存储方式,但我不确定究竟在哪里

到目前为止,这是我的控制器

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

从表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');
}

1 个答案:

答案 0 :(得分:2)

有一些问题出现了:

你做一个循环和一个嵌套循环。当上部循环第二次循环时,它使用与第一个循环相同的数据执行内部循环。 $dual_products不会改变第二次或第三次。它不依赖于上部循环。

但这并不能解释为什么你会看到一种产品。在您的控制器中,您拨打$dual_products = DualSubCategories::with('products')->findOrFail( $subcatId );。使用 SubCategory 的ID获取一个(findOrFail) DualSubCategory 。这不会失败,因为您使用sub_cat_id = 1调用它,巧合的是,该ID存在于数据库中。

如果您的关系设置正确,这应该有效:

控制器

<?php
$dual = DualSubCategories::where('sub_cat_id', $subcatId)->with('products')->get();
return View::make('site.single_subcategory', ['dual' => $dual]);

我们获得DualSubcategories,其中包含急切加载的产品并将其分配给视图。

视图

@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中的产品并显示它的标题。 (为清晰起见,我已删除了您的格式)