Чтобы подсчитать дочерние продукты для каждого родительского продукта в 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;
}