*/ protected $fillable = [ 'name', 'email', 'password', 'url', 'capacity', 'configs', 'configs->default_strategy', 'registered_ip', 'status', ]; /** * The attributes that should be hidden for serialization. * * @var array */ protected $hidden = [ 'password', 'remember_token', 'configs', 'group_id', 'is_adminer', ]; /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'id' => 'integer', 'group_id' => 'integer', 'image_num' => 'integer', 'album_num' => 'integer', 'status' => 'integer', 'capacity' => 'float', 'is_adminer' => 'bool', 'configs' => 'collection', 'email_verified_at' => 'datetime', ]; protected $appends = ['avatar']; protected static function booted() { static::creating(function (self $user) { // 默认组 $user->group_id = Group::query()->where('is_default', true)->value('id'); // 初始容量 $user->capacity = Utils::config(ConfigKey::UserInitialCapacity); $user->configs = collect([ UserConfigKey::DefaultAlbum => 0, UserConfigKey::DefaultStrategy => 0, UserConfigKey::DefaultPermission => ImagePermission::Private, UserConfigKey::IsAutoClearPreview => false, ])->merge($user->configs ?: []); }); } public function avatar(): Attribute { return new Attribute(fn () => Utils::getAvatar($this->email)); } public function group(): BelongsTo { return $this->belongsTo(Group::class, 'group_id', 'id'); } public function albums(): HasMany { return $this->hasMany(Album::class, 'user_id', 'id'); } public function images(): HasMany { return $this->hasMany(Image::class, 'user_id', 'id'); } }