Laravel Model Count По Отношениям - PullRequest
0 голосов
/ 15 декабря 2018

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

Модель продукта

  • Product_ID
  • Product_Name
  • Product_Description
  • Category_ID (много-к-1: ProductCategory.Category_ID

ProductCategory Модель

  • Category_ID
  • Category_Name

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

@foreach($products->chunk(3) as $row)
    <div class="item-row">
        @foreach($row as $product)
            <div class="item item-thumbnail" style="height: 250px;">
                <a href="product_detail.html" class="item-image">
                    @if(empty($product->Images{0}->original_image))
                        <img style="width: 100px; height: 100px;" 
                            src="https://example.com/100x100/d3d3d3/fff.gif&text=No+Image" 
                            alt="" />
                    @else
                        <img style="width: 100px; height: 100px;" 
                            src="https://cdn.example.com.au/products/{{$product->id}}/{{$product->Images{0}->original_image}}" 
                            alt="" />
                    @endif
                </a>

                <div class="item-info">
                    <h4 class="item-title">
                        <a href="/store/{{$category->alias}}/{{$product->alias}}">
                            {{$product->product_name}}
                        </a>
                    </h4>
                    <p class="item-desc">&nbsp;</p>
                    @if(empty($product->special_price))
                        <div class="item-price">
                            ${{$product->normal_price}}
                        </div>
                    @else
                        <div class="item-price">
                            ${{$product->special_price}}
                        </div>
                        <div class="item-discount-price">
                            ${{$product->normal_price}}
                        </div>
                    @endif
                </div>
            </div>
        @endforeach 
    </div>
@endforeach

И хотел бы иметь возможность создать списоквсе категории с продуктами отображаются как ...

@foreach($products->categories as $category)
    <li>
        {{$category->category_name}} ({{$category->count}})
    </li>
@endforeach

Все из одной модели.

Дополнительно

Если это поможет уточнить, я не хочу модельрадикально измениться, так как я все еще хочу иметь возможность доступа к продуктам в модели из шаблона blade-сервера, как это делается в настоящее время, но также хотел бы иметь возможность получить список категорий, например, приведенный ниже пример ...

| Product_ID | Product_Name | Category_ID |
| ---------- | ------------ | ----------- |
| 1          | Product 1    | 1           |
| 2          | Product 2    | 1           |
| 3          | Product 3    | 2           |


| Category ID | Category Name |
| ----------- | ------------- |
| 1           | Category 1    |
| 2           | Category 2    |

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

| Category Name | # Products |
| ------------- | ---------- |
| Category 1    | 2          |
| Category 2    | 1          |

1 Ответ

0 голосов
/ 15 декабря 2018

Было бы очень полезно, если бы вы предоставили код, в котором вы запрашиваете товары и категории.

Но вот, по сути, то, что вам нужно сделать.Вам нужно использовать ->withCount(..):

$products = Product::with([
    'categories' => function ($query) {
        // Adds count of category-related products
        $query->withCount('products as count');
    },
])->get();

И тогда это будет работать на ваш взгляд:

@foreach($products as $product)
    @foreach($product->categories as $category)
        <li>{{$category->category_name}} ({{$category->count}})</li>
    @endforeach
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...