accountType->description; $fromAT = $from->accountType->description; switch (true) { // is withdrawal from one of your own accounts: case ($fromAT == 'Default account'): $journalType = \TransactionType::where('type', 'Withdrawal')->first(); break; // both are yours: case ($fromAT == 'Default account' && $toAT == 'Default account'): // determin transaction type. If both accounts are new, it's an initial // balance transfer. $journalType = \TransactionType::where('type', 'Transfer')->first(); break; case ($from->transactions()->count() == 0 && $to->transactions()->count() == 0): $journalType = \TransactionType::where('type', 'Opening balance')->first(); break; default: // is deposit into one of your own accounts: case ($toAT == 'Default account'): $journalType = \TransactionType::where('type', 'Deposit')->first(); break; } // always the same currency: $currency = \TransactionCurrency::where('code', 'EUR')->first(); // new journal: $journal = new \TransactionJournal(); $journal->transactionType()->associate($journalType); $journal->transactionCurrency()->associate($currency); $journal->completed = false; $journal->description = $description; $journal->date = $date; if (!$journal->isValid()) { return false; } $journal->save(); // create transactions: $fromTransaction = new \Transaction; $fromTransaction->account()->associate($from); $fromTransaction->transactionJournal()->associate($journal); $fromTransaction->description = null; $fromTransaction->amount = $amountFrom; if (!$fromTransaction->isValid()) { return false; } $fromTransaction->save(); $toTransaction = new \Transaction; $toTransaction->account()->associate($to); $toTransaction->transactionJournal()->associate($journal); $toTransaction->description = null; $toTransaction->amount = $amountTo; if (!$toTransaction->isValid()) { return false; } $toTransaction->save(); $journal->completed = true; $journal->save(); return; echo 'saved!'; } }