*/ use HasApiTokens, HasFactory, Notifiable; /** * The attributes that are mass assignable. * * @var list */ protected $fillable = [ 'name', 'email', 'password', 'username', 'preferred_locale', 'first_name', 'last_name', 'address', 'phone', ]; /** * The attributes that should be hidden for serialization. * * @var list */ protected $hidden = [ 'password', 'remember_token', ]; /** * Get the attributes that should be cast. * * @return array */ protected function casts(): array { return [ 'email_verified_at' => 'datetime', 'password' => 'hashed', ]; } /** * Retrieve the user by the given credentials. */ public function retrieveByCredentials(array $credentials) { if ($this->getProvider()->hasTable($this->getTable())) { return $this->newModelQuery() ->where(function ($query) use ($credentials) { // Handle 'login' field for email or username if (isset($credentials['login'])) { $login = $credentials['login']; $query->where('email', $login) ->orWhere('username', $login); } else { foreach ($this->getAuthIdentifiers() as $key => $value) { $query->where($key, $value); } } }) ->first(); } return null; } protected function fullName(): Attribute { return Attribute::make( get: fn () => $this->first_name . ' ' . $this->last_name, ); } public function tenant(): HasOne { return $this->hasOne(Tenant::class); } }