Laravel — отношение «многие ко многим», количество продуктов по характеристикам продукта

Попытка получить количество продуктов по их характеристикам (многие ко многим) Например,

Product::with([’features’])->where(category_id, $category_id)->get();

Продукт A->feature1->id

/feature2->идентификатор

/feature3->идентификатор

Продукт B->feature3->id

/feature4->идентификатор

/feature6->идентификатор

.....

как я могу получить количество продуктов для каждой функции (после фильтрации по категориям продуктов)

Я не умею объяснять в формулировках, старался изо всех сил.

Конечный результат функция 1 -> 19 продуктов функция 2 -> 5 продуктов ...

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
237
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Попробуй это:

Select product_id from products where category_id = "'.$category_id.'" group by feature_id;

Как я могу сгруппировать по функции-> идентификатор? в коллекции продуктов каждый продукт может иметь пару наборов функций, поэтому продукт-> функции-> функция1-> идентификатор, продукт-> функции-> функция2-> идентификатор, продукт-> функции-> функция3-> идентификатор

Hao Phung 23.03.2019 12:20

$product_features_with_count = Feature:: with(['products']) // ->where('products.category_id', $id) ->whereHas('products', function($q) use($id){ return $ q->where('products.category_id', $id); }) ->find($feature_ids) ->groupBy('feature_type_id');

Hao Phung 23.03.2019 17:27

Я почти закончил, но не коллекция не запрашивает категорию, она включает в себя все

Hao Phung 23.03.2019 17:28

Вы должны определить отношения в своей модели Product и Feature.

class Product extends Model {
    public function features(){
        return $this->belongsTo(Feature::class);
    }
}

class Feature extends Model {
    public function products(){
        return $this->hasMany(Product::class);
    }
}

Я предполагаю, что у каждого Product есть атрибут feature_id, который содержит идентификатор Feature, которому он принадлежит.

$products = Product::with([’features’])->where(category_id, $category_id)->get(); // This query will return list of product

foreach($products as $product){
    // You can access $feature of product like this
    $feature = $product->feature;
}

Поскольку я уже определил обратную связь между обеими моделями, я также могу получить доступ к продукту из функции.

$feature->products(); // This will return a collection of Product and I can perform any sort of query on that too

// Like count number of Products
$feature->products()->count();
$feature->products()->first(); // get the first product
$feature->products()->last(); // get the last product

И так далее и так далее в четвертом

Они были определены, и у меня также есть модель productFeature. коллекция продуктов была отфильтрована по категориям, а также по некоторым функциям, поэтому модель productFeature, похоже, не помогает

Hao Phung 23.03.2019 12:12

Предполагая, что у вас есть products отношения с Feature моделью, вы можете попробовать это!

$features = Feature::withCount(['products' => function($query){
   $query->where('category_id', $category_id);
}])->get();

У вас будет products_count с каждой записью коллекции.

Category_id относится к продуктам, а не к функциям, поэтому пункт where не работает.

Hao Phung 23.03.2019 17:48
Ответ принят как подходящий

Это поможет

   with(['products' => function($q) use($category_id){
                    $q->where('category_id',18);
                }])

                ->find($feature_ids)

                ->groupBy('feature_type_id');

Пожалуйста, пометить ответ как принятый. Это показывает другим пользователям, что проблема решена.

Jonas Staudenmeir 29.03.2019 23:05

Другие вопросы по теме