accounts = new Collection(); $this->budgets = new Collection(); $this->categories = new Collection(); $this->tags = new Collection(); $this->transactionGroups = new Collection(); $this->transactionJournals = new Collection(); } public static function collectFromTransactionGroup(TransactionGroup $transactionGroup): self { Log::debug(sprintf('collectFromTransactionGroup(#%d)', $transactionGroup->id)); $object = new self(); $object->appendFromTransactionGroup($transactionGroup); return $object; } public function appendFromTransactionGroup(TransactionGroup $transactionGroup): void { $this->transactionGroups->push($transactionGroup); /** @var TransactionJournal $journal */ foreach ($transactionGroup->transactionJournals as $journal) { $this->transactionJournals->push($journal); $this->budgets = $this->budgets->merge($journal->budgets); $this->categories = $this->categories->merge($journal->categories); $this->tags = $this->tags->merge($journal->tags); /** @var Transaction $transaction */ foreach ($journal->transactions as $transaction) { $this->accounts->push($transaction->account); } } } }