2025-10-02 22:52:13 +03:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Models;
|
|
|
|
|
|
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
2025-10-04 19:40:13 +03:00
|
|
|
use Illuminate\Support\Facades\Auth;
|
2025-10-02 22:52:13 +03:00
|
|
|
|
|
|
|
|
class Exercise extends Model
|
|
|
|
|
{
|
|
|
|
|
protected $fillable = [
|
|
|
|
|
'name',
|
|
|
|
|
'slug',
|
|
|
|
|
'exercise_db_id',
|
|
|
|
|
'gif_url',
|
|
|
|
|
'instructions',
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
// relations
|
|
|
|
|
public function targetMuscles()
|
|
|
|
|
{
|
|
|
|
|
return $this->belongsToMany(Muscle::class, 'exercise_target_muscle');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function secondaryMuscles()
|
|
|
|
|
{
|
|
|
|
|
return $this->belongsToMany(Muscle::class, 'exercise_secondary_muscle');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function bodyParts()
|
|
|
|
|
{
|
|
|
|
|
return $this->belongsToMany(BodyPart::class, 'body_part_exercise');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function equipments()
|
|
|
|
|
{
|
|
|
|
|
return $this->belongsToMany(Equipment::class, 'equipment_exercise');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function workoutExercises()
|
|
|
|
|
{
|
|
|
|
|
return $this->hasMany(WorkoutExercise::class);
|
|
|
|
|
}
|
2025-10-02 23:52:07 +03:00
|
|
|
|
|
|
|
|
public function favoritedBy()
|
|
|
|
|
{
|
|
|
|
|
return $this->belongsToMany(User::class, 'exercise_favorites')->withTimestamps();
|
|
|
|
|
}
|
2025-10-04 19:40:13 +03:00
|
|
|
|
|
|
|
|
public function aliases()
|
|
|
|
|
{
|
|
|
|
|
return $this->hasMany(ExerciseAlias::class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getDisplayNameAttribute(): string
|
|
|
|
|
{
|
|
|
|
|
$name = (string) $this->attributes['name'] ?? '';
|
|
|
|
|
$userId = Auth::id();
|
|
|
|
|
if (!$userId) {
|
|
|
|
|
return $name;
|
|
|
|
|
}
|
|
|
|
|
// Use already loaded relation if present to avoid querying N+1
|
|
|
|
|
if ($this->relationLoaded('aliases')) {
|
|
|
|
|
$alias = $this->aliases->firstWhere('user_id', $userId);
|
|
|
|
|
return $alias?->name ?: $name;
|
|
|
|
|
}
|
|
|
|
|
$alias = $this->aliases()->where('user_id', $userId)->first();
|
|
|
|
|
return $alias?->name ?: $name;
|
|
|
|
|
}
|
2025-10-02 22:52:13 +03:00
|
|
|
}
|