| Current Path : /home/users/unlimited/www/learnoid.codeskitter.site/app/Models/ |
| Current File : /home/users/unlimited/www/learnoid.codeskitter.site/app/Models/Course.php |
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\Storage;
class Course extends Model
{
protected $guarded = ['id'];
use HasFactory, SoftDeletes;
public function category(): BelongsTo
{
return $this->belongsTo(Category::class)->withTrashed();
}
public function instructor(): BelongsTo
{
return $this->belongsTo(Instructor::class)->withTrashed();
}
public function chapters(): HasMany
{
return $this->hasMany(Chapter::class);
}
public function reviews(): HasMany
{
return $this->hasMany(Review::class)->withTrashed();
}
public function enrollments(): HasMany
{
return $this->hasMany(Enrollment::class);
}
public function media(): BelongsTo
{
return $this->belongsTo(Media::class);
}
public function mediaPath(): Attribute
{
$media = 'https://placehold.co/600x400';
if ($this->media && Storage::exists($this->media->src)) {
$media = Storage::url($this->media->src);
}
return Attribute::make(
get: fn() => $media,
);
}
public function video(): BelongsTo
{
return $this->belongsTo(Media::class, 'video_id');
}
public function videoPath(): Attribute
{
$video = null;
if ($this->video && Storage::exists($this->video->src)) {
$video = Storage::url($this->video->src);
}
return Attribute::make(
get: fn() => $video,
);
}
public function favouriteUsers(): BelongsToMany
{
return $this->belongsToMany(User::class, 'user_courses');
}
public function favouriteGuests(): BelongsToMany
{
return $this->belongsToMany(Guest::class, 'guest_courses');
}
public function transactions(): HasMany
{
return $this->hasMany(Transaction::class);
}
public function exams(): HasMany
{
return $this->hasMany(Exam::class);
}
public function quizzes(): HasMany
{
return $this->hasMany(Quiz::class);
}
public function questions(): HasMany
{
return $this->hasMany(Question::class);
}
public function userProgress()
{
return $this->belongsToMany(User::class, 'user_course_progresses')->withPivot('progress', 'course_id');
}
}