'boolean', 'email_verified_at' => 'datetime', ]; public function account() { return $this->belongsTo(Account::class); } public function getNameAttribute() { return $this->first_name.' '.$this->last_name; } public function setPasswordAttribute($password) { $this->attributes['password'] = Hash::needsRehash($password) ? Hash::make($password) : $password; } public function photoUrl(array $attributes) { if ($this->photo_path) { return URL::to(App::make(Server::class)->fromPath($this->photo_path, $attributes)); } } public function isDemoUser() { return $this->email === 'johndoe@example.com'; } public function scopeOrderByName($query) { $query->orderBy('last_name')->orderBy('first_name'); } public function scopeWhereRole($query, $role) { switch ($role) { case 'user': return $query->where('owner', false); case 'owner': return $query->where('owner', true); } } public function scopeFilter($query, array $filters) { $query->when($filters['search'] ?? null, function ($query, $search) { $query->where(function ($query) use ($search) { $query->where('first_name', 'like', '%'.$search.'%') ->orWhere('last_name', 'like', '%'.$search.'%') ->orWhere('email', 'like', '%'.$search.'%'); }); })->when($filters['role'] ?? null, function ($query, $role) { $query->whereRole($role); })->when($filters['trashed'] ?? null, function ($query, $trashed) { if ($trashed === 'with') { $query->withTrashed(); } elseif ($trashed === 'only') { $query->onlyTrashed(); } }); } }