No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

105 líneas
2.7KB

  1. <?php
  2. namespace App\Models;
  3. use App\Events\Model\CreatedEvent;
  4. use App\Events\Model\CreatingEvent;
  5. use App\Events\Model\DeletedEvent;
  6. use App\Events\Model\UpdatingEvent;
  7. use App\Models\Feature\IModelFeature;
  8. use Illuminate\Database\Eloquent\Concerns\HasUuids;
  9. use Illuminate\Database\Eloquent\Factories\HasFactory;
  10. use Illuminate\Database\Eloquent\SoftDeletes;
  11. use Illuminate\Database\Query\Builder;
  12. use Illuminate\Foundation\Auth\User as Authenticatable;
  13. use Illuminate\Notifications\Notifiable;
  14. use Illuminate\Support\Facades\DB;
  15. use Laravel\Sanctum\HasApiTokens;
  16. class User extends Authenticatable implements IModelFeature
  17. {
  18. use HasApiTokens, HasFactory, Notifiable, HasUuids, SoftDeletes;
  19. const COL_NAME_ID = 'id';
  20. const COL_NAME_EMAIL = 'email';
  21. const COL_NAME_NAME = 'name';
  22. const COL_NAME_PASSWORD = 'password';
  23. const COL_NAME_CREATED_BY = ColumnName::CREATED_BY;
  24. const COL_NAME_UPDATED_BY = ColumnName::UPDATED_BY;
  25. const COL_NAME_CREATED_AT = ColumnName::CREATED_AT;
  26. const COL_NAME_UPDATED_AT = ColumnName::UPDATED_AT;
  27. const COL_NAME_DELETED_AT = ColumnName::DELETED_AT;
  28. /**
  29. * The attributes that should be hidden for serialization.
  30. *
  31. * @var array<int, string>
  32. */
  33. protected $hidden = [
  34. self::COL_NAME_PASSWORD,
  35. ];
  36. protected $guarded = [
  37. self::COL_NAME_ID,
  38. self::COL_NAME_CREATED_BY,
  39. self::COL_NAME_UPDATED_BY,
  40. self::COL_NAME_CREATED_AT,
  41. self::COL_NAME_UPDATED_AT,
  42. self::COL_NAME_DELETED_AT,
  43. ];
  44. protected $dispatchesEvents = [
  45. 'creating' => CreatingEvent::class,
  46. 'created' => CreatedEvent::class,
  47. 'updating' => UpdatingEvent::class,
  48. 'deleted' => DeletedEvent::class,
  49. ];
  50. public static function getBuilder(string $name = 'main'): Builder
  51. {
  52. return DB::table(static::getTableName(), $name);
  53. }
  54. public static function getTableName(): string
  55. {
  56. return (new static)->getTable();
  57. }
  58. public function copy(IModelFeature $from): static
  59. {
  60. $data = $from->getAttributeKeys();
  61. foreach ($data as $key) {
  62. $this->$key = $from->$key;
  63. }
  64. return $this;
  65. }
  66. public function getAttributeKeys(): array
  67. {
  68. return array_values(array_unique(array_merge(array_keys($this->attributesToArray()), $this->hidden)));
  69. }
  70. public function isNotSavedModel(): bool
  71. {
  72. return data_get($this, ColumnName::ID) === null;
  73. }
  74. public function getHistory(): ?HistoryModel
  75. {
  76. return new UserHistory();
  77. }
  78. public function getModelName(): string
  79. {
  80. return "ユーザー情報";
  81. }
  82. public function getChangeLogMessage($before, $after): ?string
  83. {
  84. return null;
  85. }
  86. }