userGroup->currencyExchangeRates()->where('id', $rate->id)->delete(); } #[Override] public function getAll(): Collection { return $this->userGroup->currencyExchangeRates()->orderBy('date', 'ASC')->get(); } #[Override] public function getRates(TransactionCurrency $from, TransactionCurrency $to): Collection { // orderBy('date', 'DESC')->toRawSql(); return $this->userGroup->currencyExchangeRates() ->where(function (Builder $q1) use ($from, $to): void { $q1->where(function (Builder $q) use ($from, $to): void { $q->where('from_currency_id', $from->id) ->where('to_currency_id', $to->id) ; })->orWhere(function (Builder $q) use ($from, $to): void { $q->where('from_currency_id', $to->id) ->where('to_currency_id', $from->id) ; }); }) ->orderBy('date', 'DESC') ->get(['currency_exchange_rates.*']) ; } #[Override] public function getSpecificRateOnDate(TransactionCurrency $from, TransactionCurrency $to, Carbon $date): ?CurrencyExchangeRate { /** @var null|CurrencyExchangeRate */ return $this->userGroup->currencyExchangeRates() ->where('from_currency_id', $from->id) ->where('to_currency_id', $to->id) ->where('date', $date->format('Y-m-d')) ->first() ; } #[Override] public function storeExchangeRate(TransactionCurrency $from, TransactionCurrency $to, string $rate, Carbon $date): CurrencyExchangeRate { $object = new CurrencyExchangeRate(); $object->user_id = auth()->user()->id; $object->user_group_id = $this->userGroup->id; $object->from_currency_id = $from->id; $object->to_currency_id = $to->id; $object->rate = $rate; $object->date = $date; $object->date_tz = $date->format('e'); $object->save(); return $object; } #[Override] public function updateExchangeRate(CurrencyExchangeRate $object, string $rate, ?Carbon $date = null): CurrencyExchangeRate { $object->rate = $rate; if ($date instanceof Carbon) { $object->date = $date; } $object->save(); return $object; } public function deleteRates(TransactionCurrency $from, TransactionCurrency $to): void { $this->userGroup->currencyExchangeRates() ->where('from_currency_id', $from->id) ->where('to_currency_id', $to->id) ->delete() ; } }