Подсчет дочерних продуктов для каждого родительского продукта в Laravel: несколько методов с примерами кода

Чтобы подсчитать дочерние продукты для каждого родительского продукта в Laravel, вы можете использовать различные методы. Вот несколько примеров:

Метод 1: использование красноречивых отношений

// Parent model
class ParentProduct extends Model
{
    public function childProducts()
    {
        return $this->hasMany(ChildProduct::class);
    }
}
// Child model
class ChildProduct extends Model
{
    public function parentProduct()
    {
        return $this->belongsTo(ParentProduct::class);
    }
}
// Usage
$parentProducts = ParentProduct::withCount('childProducts')->get();
foreach ($parentProducts as $parentProduct) {
    echo "Parent Product: " . $parentProduct->name;
    echo "Child Product Count: " . $parentProduct->child_products_count;
}

Метод 2: использование необработанных запросов

$parentProducts = DB::table('parent_products')
    ->leftJoin('child_products', 'parent_products.id', '=', 'child_products.parent_id')
    ->select('parent_products.*', DB::raw('COUNT(child_products.id) as child_product_count'))
    ->groupBy('parent_products.id')
    ->get();
foreach ($parentProducts as $parentProduct) {
    echo "Parent Product: " . $parentProduct->name;
    echo "Child Product Count: " . $parentProduct->child_product_count;
}

Метод 3. Использование подзапросов

$parentProducts = ParentProduct::select(
    'parent_products.*',
    DB::raw('(SELECT COUNT(*) FROM child_products WHERE child_products.parent_id = parent_products.id) as child_product_count')
)->get();
foreach ($parentProducts as $parentProduct) {
    echo "Parent Product: " . $parentProduct->name;
    echo "Child Product Count: " . $parentProduct->child_product_count;
}