. */ declare(strict_types=1); namespace FireflyIII\Factory; use Carbon\Carbon; use FireflyIII\Models\TransactionJournalMeta; /** * Class TransactionJournalMetaFactory */ class TransactionJournalMetaFactory { public function updateOrCreate(array $data): ?TransactionJournalMeta { // app('log')->debug('In updateOrCreate()'); $value = $data['data']; /** @var null|TransactionJournalMeta $entry */ $entry = $data['journal']->transactionJournalMeta()->where('name', $data['name'])->first(); if (null === $value && null !== $entry) { // app('log')->debug('Value is empty, delete meta value.'); $entry->delete(); return null; } if ($data['data'] instanceof Carbon) { app('log')->debug('Is a carbon object.'); $value = $data['data']->toW3cString(); } if ('' === (string)$value) { // app('log')->debug('Is an empty string.'); // don't store blank strings. if (null !== $entry) { app('log')->debug('Will not store empty strings, delete meta value'); $entry->delete(); } return null; } if (null === $entry) { // app('log')->debug('Will create new object.'); app('log')->debug(sprintf('Going to create new meta-data entry to store "%s".', $data['name'])); $entry = new TransactionJournalMeta(); $entry->transactionJournal()->associate($data['journal']); $entry->name = $data['name']; } app('log')->debug('Will update value and return.'); $entry->data = $value; $entry->save(); return $entry; } }