accounts = new Collection(); $this->budgets = new Collection(); $this->categories = new Collection(); $this->tags =new Collection(); $this->transactionJournals = new Collection(); } public static function collectFromTransactionGroup(TransactionGroup $transactionGroup): self { $object = new self; /** @var TransactionJournal $journal */ foreach($transactionGroup->transactionJournals as $journal) { $object->transactionJournals->push($journal); $object->budgets = $object->tags->merge($journal->budgets); $object->categories = $object->tags->merge($journal->categories); $object->tags = $object->tags->merge($journal->tags); /** @var Transaction $transaction */ foreach($journal->transactions as $transaction) { $object->accounts->push($transaction->account); } } return $object; } }