id)) return response()->json('egg id is required', '400'); #get products that include this egg $products = Product::query()->with('nodes')->whereHas('eggs', function (Builder $builder) use ($egg) { $builder->where('id', '=', $egg->id); })->get(); $nodes = collect(); #filter unique nodes $products->each(function (Product $product) use ($nodes) { $product->nodes->each(function (Node $node) use ($nodes) { if (!$nodes->contains('id', $node->id) && !$node->disabled) { $nodes->add($node); } }); }); return $nodes; } /** * @param Node $node * @return Collection|JsonResponse */ public function getProductsBasedOnNode(Node $node) { if (is_null($node->id)) return response()->json('node id is required', '400'); return Product::query()->whereHas('nodes', function (Builder $builder) use ($node) { $builder->where('id' , '=' , $node->id); })->get(); } }