Попытка получить количество продуктов по их характеристикам (многие ко многим) Например,
Product::with([’features’])->where(category_id, $category_id)->get();
Продукт A->feature1->id
/feature2->идентификатор
/feature3->идентификатор
Продукт B->feature3->id
/feature4->идентификатор
/feature6->идентификатор
.....
как я могу получить количество продуктов для каждой функции (после фильтрации по категориям продуктов)
Я не умею объяснять в формулировках, старался изо всех сил.
Конечный результат функция 1 -> 19 продуктов функция 2 -> 5 продуктов ...






Попробуй это:
Select product_id from products where category_id = "'.$category_id.'" group by feature_id;
$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');
Я почти закончил, но не коллекция не запрашивает категорию, она включает в себя все
Вы должны определить отношения в своей модели 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, похоже, не помогает
Предполагая, что у вас есть products отношения с Feature моделью, вы можете попробовать это!
$features = Feature::withCount(['products' => function($query){
$query->where('category_id', $category_id);
}])->get();
У вас будет products_count с каждой записью коллекции.
Category_id относится к продуктам, а не к функциям, поэтому пункт where не работает.
Это поможет
with(['products' => function($q) use($category_id){
$q->where('category_id',18);
}])
->find($feature_ids)
->groupBy('feature_type_id');
Пожалуйста, пометить ответ как принятый. Это показывает другим пользователям, что проблема решена.
Как я могу сгруппировать по функции-> идентификатор? в коллекции продуктов каждый продукт может иметь пару наборов функций, поэтому продукт-> функции-> функция1-> идентификатор, продукт-> функции-> функция2-> идентификатор, продукт-> функции-> функция3-> идентификатор