proposals as $proposal) { $proposal->delete(); } }); } /** Owned tables */ public function tables() { 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'); } // --------- Relation Helpers --------- public function addFavourite(Table $table) { $this->favouriteTables()->attach($table); } public function removeFavourite(Table $table) { $this->favouriteTables()->detach($table); } public function followDiscussion(Table $table) { $this->followedDiscussions()->attach($table); } public function unfollowDiscussion(Table $table) { $this->followedDiscussions()->detach($table); } public function fakeTables() { return [ (object)['title' => 'Table 1'], (object)['title' => 'Table 2'], (object)['title' => 'Table 3'] ]; } }