auditionadmin/app/Models/Room.php

57 lines
1.4 KiB
PHP

<?php
namespace App\Models;
use App\Events\AuditionChange;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
class Room extends Model
{
use HasFactory;
protected $guarded = [];
//TODO can a user add rooms?
public function auditions(): HasMany
{
return $this->hasMany(Audition::class)->orderBy('order_in_room');
}
public function entries(): HasManyThrough
{
return $this->hasManyThrough(
Entry::class,
Audition::class,
'room_id', // Foreign key on the auditions table
'audition_id', //Foreign key on the Entries table
'id', // Local key on the rooms table
'id' // Local key on the Auditions table
);
}
public function users(): BelongsToMany
{
return $this->belongsToMany(User::class,'room_user');
}
public function judges(): BelongsToMany
{
return $this->belongsToMany(User::class,'room_user','room_id','user_id');
}
public function addJudge($userId): void
{
$this->judges()->attach($userId);
AuditionChange::dispatch();
}
public function removeJudge($userId): void
{
$this->judges()->detach($userId);
AuditionChange::dispatch();
}
}