0

I have the following relationships in models:

Product.php

public function skus()
{
    return $this->belongsToMany(Sku::class);
}

Sku.php

public function prices()
{
    return $this->hasMany(Price::class);
}

I need to get an attribute indicating whether a product has at least one price or not (in the extreme case, just the number of prices).

Product::withExists('sku.prices') or Product::withCount('sku.prices')

I know about this repository https://github.com/staudenmeir/belongs-to-through, but I prefer to use complex query once

UPDATE: I have already written a sql query for this purpose, but I don't know how to do it in Laravel:

SELECT
  *,
  EXISTS (SELECT
      *
    FROM prices
      INNER JOIN skus
        ON prices.sku_id = skus.id
      INNER JOIN product_sku
        ON skus.id = product_sku.sku_id
    WHERE products.id = product_sku.product_id
) AS prices_exists
FROM products

1 Answers1

0

Here you can get at least one record

$skuPrice = Sku::with('prices')
                ->has('prices', '>=', 1)
                ->withCount('prices')
                ->get();