Сводная таблица фильтров на Laravel Blade - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть таблицы - товары и категории с сводной таблицей.Что мне нужно сделать, это отобразить категории на вкладке и получить соответствующие продукты.

// Product.php
public function categories(){
    return $this->belongsToMany('App\Models\Category');
}

// Category.php
public function products(){
    return $this->belongsToMany('App\Product');
}

// IndexController.php
$products = Product::where('status', StatusConstant::PT_ACTIVE)
                ->with(['joindraw' => function ($query){
                        $query->where('user_id', $this->user->id);
                }])->get();

return view('store.index', ['products' => $products, 'category' => $category]);

и я ожидаю некоторый вывод, подобный этому:

<div class="row">
    <div class="col s12">
        <ul class="tabs">
            <li class="tab"><a class="" href="#tabs1">Category 1</a></li>
            <li class="tab"><a class="active" href="#tabs2">Category 2</a></li>
            <li class="tab"><a class="" href="#tabs3">Category 3</a></li>
        </ul>
    </div>
    <div id="tabs1" class="col s12">
        <div class="contents-tabs">
            <div class="table-contents default-table">
              //Products in category id 1...

Могу ли я узнать, как я могу сделать фильтр на лезвии?

Ответы [ 2 ]

2 голосов
/ 28 апреля 2019

Вместо отправки продуктов в представление, рассмотрите возможность отправки категорий с соответствующими продуктами в представление.

Контроллер

$categories = Category::with(['products' => function ($query) {
    $query->where('status', StatusConstant::PT_ACTIVE);
    $query->with(['joindraw' => function ($query) {
        $query->where('user_id', $this->user->id);
    }]);
}])->get();

return view('store.index', ['categries' => $categries]);

Теперь вы можете циклически проходить по каждой категориии получить доступ к сопутствующим продуктам.

Blade

<div class="row">
    <div class="col s12">
        <ul class="tabs">
            @foreach($categries as $category)
                <li class="tab"><a class="" href="#{{ $category->id }}">{{ $category->name }}</a></li>
            @endforeach()
       </ul>
    </div>

    @foreach($categories as $category)
        <div id="{{ $category->id }}" class="col s12">
            <div class="contents-tabs">
                <div class="table-contents default-table">
                    <!-- your code goes here -->
                    <!-- Imagine you wanna list product names. -->

                    <ul>
                        @foreach($category->products as $product)
                            <li>{{ $product->name }}</li>
                        @endforeach()
                    </ul>
                </div>
            </div>
       </div>
    @endforeach()
</div>
1 голос
/ 28 апреля 2019

Вы можете группировать товары по категориям:

$categoryProducts = [];
foreach($products as $product){
    foreach($product->categories as $category){
        if(!isset($categoryProducts[$category->id])){
            $categoryProducts[$category->id] = [];
        }

        $categoryProducts[$category->id][$product->id]=$product;
    }
}

Затем вы можете отображать товары каждой категории на их вкладках с идентификатором категории.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...