datatable.directory codebase https://datatable.directory/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
datatable.directory/app/Models/Table.php

81 lines
1.8 KiB

<?php
namespace App\Models;
use App\Models\Concerns\NotificationContext;
use App\Models\Concerns\Reportable;
use Illuminate\Database\Eloquent\Model;
/**
* A data table object (referencing changesets and rows)
*/
7 years ago
class Table extends Model
{
use Reportable;
use NotificationContext;
protected static function boot()
{
parent::boot();
static::deleting(function(Table $self) {
// update refcounts
$self->revisions()->decrement('refs');
});
}
/** Owning user */
public function owner()
{
return $this->belongsTo(User::class, 'owner_id');
}
/** Fork precursor */
public function parentTable()
{
7 years ago
return $this->belongsTo(Table::class, 'ancestor_id');
}
/** Fork descendants */
public function forks()
{
7 years ago
return $this->hasMany(Table::class, 'ancestor_id');
}
/** All related revisions (this may include merged revisions) */
public function revisions()
{
return $this->belongsToMany(Revision::class, 'table_revision_pivot');
}
7 years ago
/** Active revision */
public function activeRevision()
{
7 years ago
return $this->hasOne(Revision::class, 'revision_id');
}
7 years ago
/** Proposals submitted to this table */
public function proposals()
{
7 years ago
return $this->hasMany(Proposal::class);
}
/** User-submitted comments */
public function comments()
{
return $this->hasMany(TableComment::class);
}
/** Users favouriting this table */
public function favouritingUsers()
{
return $this->belongsToMany(User::class, 'table_favourites');
}
/** Users to notify about comments */
public function discussionFollowers()
{
return $this->belongsToMany(User::class, 'discussion_follows');
}
}