'required|exists:limits,id', 'startdate' => 'required|date', 'enddate' => 'required|date', 'amount' => 'numeric|required|min:0.01', ]; public static $factory = [ 'limit_id' => 'factory|Limit', 'startdate' => 'date', 'enddate' => 'date', 'amount' => 'integer' ]; public function limit() { return $this->belongsTo('Limit'); } public function getDates() { return ['created_at', 'updated_at', 'startdate', 'enddate']; } /** * How much money is left in this? */ public function left() { $key = 'limit-rep-left-' . $this->id; if (Cache::has($key)) { return Cache::get($key); } $left = floatval($this->amount); // budget: $budget = $this->limit->budget; /** @var \Firefly\Storage\Limit\EloquentLimitRepository $limits */ $limits = App::make('Firefly\Storage\Limit\EloquentLimitRepository'); $set = $limits->getTJByBudgetAndDateRange($budget, $this->startdate, $this->enddate); foreach ($set as $journal) { foreach ($journal->transactions as $t) { if ($t->amount < 0) { $left += floatval($t->amount); } } } Cache::forever($key, $left); return $left; } }