Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

HasDefault.php 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace App\Concerns;
  3. use Illuminate\Database\Eloquent\Builder;
  4. use Illuminate\Database\Eloquent\Model;
  5. trait HasDefault
  6. {
  7. public function isEnabled(): bool
  8. {
  9. return $this->enabled === true;
  10. }
  11. public function isDisabled(): bool
  12. {
  13. return $this->enabled === false;
  14. }
  15. public static function enabledLabel(): string
  16. {
  17. return translate('Yes');
  18. }
  19. public static function disabledLabel(): string
  20. {
  21. return translate('No');
  22. }
  23. public static function bootHasDefault(): void
  24. {
  25. static::saving(function (Model $model) {
  26. if ($model->isDirty(['enabled', $model->evaluatedDefault])) {
  27. if ($model->enabled === true) {
  28. static::query()
  29. ->whereKeyNot($model->getKey())
  30. ->where('enabled', true)
  31. ->when(filled($model->evaluatedDefault), static fn (Builder $query) => $query->where($model->evaluatedDefault, $model->{$model->evaluatedDefault}))
  32. ->update(['enabled' => false]);
  33. } else {
  34. $enabledRecordDoesNotExist = static::query()
  35. ->whereKeyNot($model->getKey())
  36. ->where('enabled', true)
  37. ->when(filled($model->evaluatedDefault), static fn (Builder $query) => $query->where($model->evaluatedDefault, $model->{$model->evaluatedDefault}))
  38. ->doesntExist();
  39. if ($enabledRecordDoesNotExist) {
  40. $model->enabled = true;
  41. }
  42. }
  43. }
  44. });
  45. }
  46. }