=', now())->get(); } public function event(): BelongsTo { return $this->belongsTo(Event::class); } public function entries(): HasMany { return $this->hasMany(Entry::class); } public function room(): BelongsTo { return $this->belongsTo(Room::class); } public function scoringGuide(): BelongsTo { return $this->belongsTo(ScoringGuide::class); } public function dislpay_fee(): String { return '$' . number_format($this->entry_fee / 100, 2); } public function has_no_draw(): bool { // return true if all of my entries have a null draw_number //return $this->entries->every(fn($entry) => is_null($entry->draw_number)); // return $this->entries()->whereNotNull('draw_number')->doesntExist(); if ($this->entries->count() == 0) { return false; } if ($this->relationLoaded('entries')) { return $this->entries->every(function ($entry) { return is_null($entry->draw_number); }); } else { return $this->entries()->whereNotNull('draw_number')->doesntExist(); } } public function has_complete_draw(): bool { // return true if all of my entries have a draw_number // return $this->entries->every(fn($entry) => !is_null($entry->draw_number)); // return $this->entries()->whereNull('draw_number')->doesntExist(); if ($this->entries->count() == 0) { return false; } if ($this->relationLoaded('entries')) { return $this->entries->every(function ($entry) { return !is_null($entry->draw_number); }); } else { return $this->entries()->whereNull('draw_number')->doesntExist(); } } public function has_partial_draw(): bool { if ($this->entries->count() == 0) { return false; } // return true I have at least one entry with a null draw number AND at least one entry with a non-null draw number //return $this->entries->contains(fn($entry) => is_null($entry->draw_number)) && $this->entries->contains(fn($entry) => !is_null($entry->draw_number)); //$hasNull = $this->entries()->whereNull('draw_number')->exists(); //$hasNotNull = $this->entries()->whereNotNull('draw_number')->exists(); //return $hasNull && $hasNotNull; if ($this->relationLoaded('entries')) { $hasNull = $this->entries->contains(function ($entry) { return is_null($entry->draw_number); }); $hasNotNull = $this->entries->contains(function ($entry) { return !is_null($entry->draw_number); }); return $hasNull && $hasNotNull; } else { $hasNull = $this->entries()->whereNull('draw_number')->exists(); $hasNotNull = $this->entries()->whereNotNull('draw_number')->exists(); return $hasNull && $hasNotNull; } } public function runDraw(): null { $entries = $this->entries->shuffle(); foreach ($entries as $index => $entry) { $entry->update(['draw_number' => $index + 1]); $entry->save(); } return null; // TODO move all draw functions to a DrawService } /** * @return BelongsToMany|\App\Models\User[] */ public function judges() { return $this->belongsToMany( User::class, // The related model 'room_user', // The intermediate table 'room_id', // The foreign key on the intermediate table 'user_id', // The related key on the intermediate table 'room_id', // The local key 'id' // The local ke ); } /** * Ensures judges_count property is always available */ public function getJudgesCountAttribute() { if (!isset($this->attributes['judges_count'])) { $this->attributes['judges_count'] = $this->judges()->count(); } return $this->attributes['judges_count']; } }