<?php namespace App\Models; use AdamWathan\EloquentOAuth\OAuthIdentity; use App\Models\Concerns\Reportable; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; /** * A user in the application * * @property Proposal[]|Collection $proposals */ class User extends Authenticatable { use Reportable; use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; protected static function boot() { parent::boot(); static::deleting(function(User $self) { // manually delete proposals to ensure row refcounts are updated foreach ($self->proposals as $proposal) { $proposal->delete(); } $self->notificationsCaused()->delete(); }); } /** Owned tables */ public function dataTables() { return $this->hasMany(Table::class, 'owner_id'); } /** Assigned OAuth identities */ public function socialIdentities() { return $this->hasMany(OAuthIdentity::class); } /** Authored proposals */ public function proposals() { return $this->hasMany(Proposal::class, 'author_id'); } /** Authored comments */ public function tableComments() { return $this->hasMany(TableComment::class, 'author_id'); } /** User's favourite tables (personal collection) */ public function favouriteTables() { return $this->belongsToMany(Table::class, 'table_favourites'); } /** Tables whose discussions user follows (this is similar to favourites) */ public function followedDiscussions() { return $this->belongsToMany(Table::class, 'discussion_follows'); } /** Reports sent by this user */ public function authoredReports() { return $this->hasMany(ContentReport::class, 'author_id'); } /** Notifications for this user */ public function notifications() { return $this->hasMany(Notification::class); } /** * Notifications caused by this user * * @return HasMany */ public function notificationsCaused() { return $this->hasMany(Notification::class, 'actor_id'); } }