Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

HandlesCompanyDefaultUpdate.php 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. namespace App\Traits;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Illuminate\Support\Facades\Auth;
  5. trait HandlesCompanyDefaultUpdate
  6. {
  7. abstract protected function getRelatedEntities(): array;
  8. protected function handleRecordUpdate(Model $record, array $data): Model
  9. {
  10. $relatedEntities = $this->getRelatedEntities();
  11. $existingRecord = $record::query()->where('company_id', Auth::user()->currentCompany->id)
  12. ->latest()
  13. ->first();
  14. foreach ($relatedEntities as $field => $params) {
  15. [$modelClass, $key, $type] = array_pad($params, 3, null);
  16. if ($existingRecord === null || ! isset($existingRecord->{$field})) {
  17. continue;
  18. }
  19. if (isset($data[$field]) && $data[$field] !== $existingRecord->{$field}) {
  20. $this->updateEnabledRecord(new $modelClass, $key, $existingRecord->{$field}, $type, false);
  21. $this->updateEnabledRecord(new $modelClass, $key, $data[$field], $type);
  22. }
  23. }
  24. $defaults = $record::query()->where('company_id', Auth::user()->currentCompany->id)->first();
  25. if ($defaults === null) {
  26. $defaults = $record::query()->create($data);
  27. } else {
  28. $defaults->update($data);
  29. }
  30. return $defaults;
  31. }
  32. protected function updateEnabledRecord(Model $record, string $key, mixed $value, ?string $type = null, bool $enabled = true): void
  33. {
  34. $query = $record::query()->where('company_id', Auth::user()->currentCompany->id)
  35. ->where('enabled', ! $enabled);
  36. if ($type !== null) {
  37. $query = $query->where('type', $type);
  38. }
  39. $query->where($key, $value)
  40. ->update(compact('enabled'));
  41. }
  42. }