diff --git a/app/Models/Resume.php b/app/Models/Resume.php index d5c8a1b..a75eb21 100644 --- a/app/Models/Resume.php +++ b/app/Models/Resume.php @@ -2,10 +2,12 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Attributes\UsePolicy; use Illuminate\Database\Eloquent\Factories\HasFactory; -use Illuminate\Database\Eloquent\Model; -use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; #[UsePolicy(ResumePolicy::class)] class Resume extends Model @@ -22,4 +24,9 @@ class Resume extends Model { return $this->belongsTo(User::class, 'creator_id'); } + + public function components(): BelongsToMany + { + return $this->belongsToMany(ResumeComponent::class, 'resume_resume_component')->withPivot('order')->withTimestamps()->orderBy('order'); + } } diff --git a/app/Models/ResumeComponent.php b/app/Models/ResumeComponent.php index 0070ca9..91a2eae 100644 --- a/app/Models/ResumeComponent.php +++ b/app/Models/ResumeComponent.php @@ -6,6 +6,7 @@ use App\Policies\ResumeComponentPolicy; use Illuminate\Database\Eloquent\Attributes\UsePolicy; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; #[UsePolicy(ResumeComponentPolicy::class)] class ResumeComponent extends Model @@ -16,4 +17,9 @@ class ResumeComponent extends Model protected $fillable = [ 'vue_component_name', ]; + + public function resumes(): BelongsToMany + { + return $this->belongsToMany(Resume::class, 'resume_resume_component')->withPivot('order')->withTimestamps(); + } } diff --git a/database/migrations/2025_08_16_112542_create_resume_resume_component_link.php b/database/migrations/2025_08_16_112542_create_resume_resume_component_link.php new file mode 100644 index 0000000..5f7c8e6 --- /dev/null +++ b/database/migrations/2025_08_16_112542_create_resume_resume_component_link.php @@ -0,0 +1,35 @@ +id(); + + $table->foreignIdFor(Resume::class)->constrained()->onDelete('cascade'); + $table->foreignIdFor(ResumeComponent::class)->constrained()->onDelete('cascade'); + + $table->integer('order')->default(0); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('resume_resume_component_link'); + } +};