user()->cannot('readOnly', $portfolio)) { abort(403); } $portfolio->load(['transactions', 'holdings']); // get portfolio metrics $metrics = cache()->remember( 'portfolio-metrics-' . $portfolio->id, 60, function () use ($portfolio) { return Holding::query() ->portfolio($portfolio->id) ->withPortfolioMetrics() ->first(); } ); $formattedHoldings = $this->getFormattedHoldings($portfolio); return view('portfolio.show', compact(['portfolio', 'metrics', 'formattedHoldings'])); } public function getFormattedHoldings($portfolio) { $formattedHoldings = ''; foreach($portfolio->holdings as $holding) { $formattedHoldings .= " * Holding of ".$holding->market_data->name." (".$holding->symbol.")" ."; own ". ($holding->quantity > 0 ? $holding->quantity : 'ZERO') . " shares" ."; avg cost basis ". $holding->average_cost_basis ."; curr market value ". $holding->market_data->market_value ."; unrealized gains ". $holding->market_gain_dollars ."; realized gains ". $holding->realized_gain_dollars ."; dividends earned ". $holding->dividends_earned ."\n\n"; } return $formattedHoldings; } }