Laravel - отношение «многие ко многим», количество продуктов по характеристикам продукта - PullRequest
0 голосов
/ 23 марта 2019

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

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

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

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

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

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

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

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

.....

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

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

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

Ответы [ 4 ]

0 голосов
/ 23 марта 2019

Это сделает трюк

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

                ->find($feature_ids)

                ->groupBy('feature_type_id');
0 голосов
/ 23 марта 2019

Вы должны определить отношения в ваших 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

И так далее, и так далее.

0 голосов
/ 23 марта 2019

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

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

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

0 голосов
/ 23 марта 2019

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

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