auditionadmin/app/Models/ScoreSheet.php

57 lines
1.5 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasOneThrough;
class ScoreSheet extends Model
{
use HasFactory;
protected $fillable = [
'user_id',
'entry_id',
'subscores',
'seating_total',
'advancement_total',
];
protected $casts = ['subscores' => 'json'];
public function entry(): BelongsTo
{
return $this->belongsTo(Entry::class);
}
public function judge(): BelongsTo
{
return $this->belongsTo(User::class, 'user_id');
}
public function audition(): HasOneThrough
{
return $this->hasOneThrough(
Audition::class, // The final model you want to access
Entry::class, // The intermediate model
'id', // Foreign key on the intermediate model (Entry)
'id', // Foreign key on the final model (Audition)
'entry_id', // Local key on the current model (ScoreSheet)
'audition_id' // Local key on the intermediate model (Entry)
);
}
public function getSubscore($id)
{
return $this->subscores[$id]['score'] ?? false;
// this function is used at resources/views/tabulation/entry_score_sheet.blade.php
}
public function testValidity(): bool
{
return $this->audition->judges->contains('id', $this->user_id);
}
}