Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

HandlesDefaultSettingRecordCreation.php 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. namespace App\Traits;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Illuminate\Support\Facades\Auth;
  5. trait HandlesDefaultSettingRecordCreation
  6. {
  7. abstract protected function getRelatedEntities(): array;
  8. abstract protected function getFormModel(): string;
  9. protected function handleRecordCreation(array $data): Model
  10. {
  11. $relatedEntities = $this->getRelatedEntities();
  12. $model = $this->getFormModel();
  13. $existingRecord = $model::where('company_id', Auth::user()->currentCompany->id)
  14. ->latest()
  15. ->first();
  16. $newData = [
  17. 'company_id' => Auth::user()->currentCompany->id,
  18. 'updated_by' => Auth::id(),
  19. ];
  20. foreach ($relatedEntities as $field => $params) {
  21. [$class, $key, $type] = array_pad($params, 3, null);
  22. if (isset($data[$field]) && $data[$field] !== $existingRecord->{$field}) {
  23. $this->updateEnabledRecord($class, $key, $existingRecord->{$field}, $type, false);
  24. $this->updateEnabledRecord($class, $key, $data[$field], $type, true);
  25. $newData[$field] = $data[$field];
  26. } else {
  27. $newData[$field] = $existingRecord->{$field};
  28. }
  29. }
  30. return $model::create($newData);
  31. }
  32. protected function updateEnabledRecord($class, $key, $value, $type = null, $enabled = true): void
  33. {
  34. $query = $class::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([
  41. 'enabled' => $enabled,
  42. 'updated_by' => Auth::id(),
  43. ]);
  44. }
  45. }