Refactor model relationships by converting multiple HasOne relationships to HasMany and pluralizing method names for consistency.

This commit is contained in:
Yoga Pangestu 2026-01-27 21:04:49 +07:00
parent 3f0529a53e
commit a847b6e1fc
12 changed files with 104 additions and 56 deletions

View File

@ -8,6 +8,7 @@
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Swindon\FilamentHashids\Traits\HasHashid; use Swindon\FilamentHashids\Traits\HasHashid;
@ -36,7 +37,12 @@ protected function company(Builder $query): void
$query->where('type', AnnouncementType::COMPANY); $query->where('type', AnnouncementType::COMPANY);
} }
public function partnerMedia(): BelongsToMany public function announcementMedias(): HasMany
{
return $this->hasMany(AnnouncementMedia::class);
}
public function partnerMedias(): BelongsToMany
{ {
return $this->belongsToMany(PartnerMedia::class, 'announcement_media'); return $this->belongsToMany(PartnerMedia::class, 'announcement_media');
} }

View File

@ -46,4 +46,9 @@ public function contentRecaps(): HasMany
{ {
return $this->hasMany(ContentRecap::class); return $this->hasMany(ContentRecap::class);
} }
public function issueManagements(): HasMany
{
return $this->hasMany(IssueManagement::class);
}
} }

View File

@ -6,8 +6,8 @@
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough; use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\InteractsWithMedia;
@ -26,23 +26,23 @@ protected function casts(): array
]; ];
} }
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function partnerMedia(): HasOne
{
return $this->hasOne(PartnerMedia::class);
}
public function journalists(): HasManyThrough public function journalists(): HasManyThrough
{ {
return $this->hasManyThrough(Journalist::class, PartnerMedia::class); return $this->hasManyThrough(Journalist::class, PartnerMedia::class);
} }
public function verificationRequest(): HasOne public function partnerMedias(): HasMany
{ {
return $this->hasOne(VerificationRequest::class); return $this->hasMany(PartnerMedia::class);
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function verificationRequests(): HasMany
{
return $this->hasMany(VerificationRequest::class);
} }
} }

View File

@ -10,7 +10,6 @@
use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough; use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\InteractsWithMedia;
@ -63,30 +62,30 @@ protected function completed(Builder $query): void
$query->where('status', CooperationStatus::COMPLETED); $query->where('status', CooperationStatus::COMPLETED);
} }
public function proposal(): HasOne public function cooperationMedias(): HasMany
{
return $this->hasOne(CooperationProposal::class);
}
public function taskAssignment(): HasOne
{
return $this->hasOne(TaskAssignment::class);
}
public function cooperationMedia(): HasMany
{ {
return $this->hasMany(CooperationMedia::class); return $this->hasMany(CooperationMedia::class);
} }
public function partnerMedia(): BelongsToMany public function partnerMedias(): BelongsToMany
{ {
return $this->belongsToMany(PartnerMedia::class, 'cooperation_media') return $this->belongsToMany(PartnerMedia::class, 'cooperation_media')
->withPivot(['status']) ->withPivot(['status'])
->withTimestamps(); ->withTimestamps();
} }
public function proposals(): HasMany
{
return $this->hasMany(CooperationProposal::class);
}
public function reports(): HasManyThrough public function reports(): HasManyThrough
{ {
return $this->hasManyThrough(Report::class, TaskAssignment::class); return $this->hasManyThrough(Report::class, TaskAssignment::class);
} }
public function taskAssignments(): HasMany
{
return $this->hasMany(TaskAssignment::class);
}
} }

View File

@ -7,7 +7,7 @@
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Database\Eloquent\Relations\Pivot; use Illuminate\Database\Eloquent\Relations\Pivot;
use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\HasMedia;
@ -57,13 +57,13 @@ public function partnerMedia(): BelongsTo
return $this->belongsTo(PartnerMedia::class); return $this->belongsTo(PartnerMedia::class);
} }
public function payments(): HasMany
{
return $this->hasMany(CooperationPayment::class, 'cooperation_media_id');
}
public function rejectionReasons(): MorphMany public function rejectionReasons(): MorphMany
{ {
return $this->morphMany(RejectionReason::class, 'rejectable'); return $this->morphMany(RejectionReason::class, 'rejectable');
} }
public function payment(): HasOne
{
return $this->hasOne(CooperationPayment::class, 'cooperation_media_id');
}
} }

View File

@ -23,6 +23,11 @@ protected function casts(): array
]; ];
} }
public function issueManagements(): HasMany
{
return $this->hasMany(IssueManagement::class);
}
public function subLocations(): HasMany public function subLocations(): HasMany
{ {
return $this->hasMany(SubLocation::class); return $this->hasMany(SubLocation::class);

View File

@ -5,7 +5,7 @@
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\InteractsWithMedia;
@ -17,13 +17,18 @@ class MediaMonitoring extends Model implements HasMedia
protected $guarded = ['id']; protected $guarded = ['id'];
public function themes(): BelongsToMany public function issueManagements(): HasMany
{ {
return $this->belongsToMany(Theme::class); return $this->hasMany(IssueManagement::class);
} }
public function issueManagement(): HasOne public function mediaMonitoringThemes(): HasMany
{ {
return $this->hasOne(IssueManagement::class); return $this->hasMany(MediaMonitoringTheme::class);
}
public function themes(): BelongsToMany
{
return $this->belongsToMany(Theme::class, 'media_monitoring_theme');
} }
} }

View File

@ -83,14 +83,9 @@ protected function wherePivotPending(Builder $query): void
$query->where('cooperation_media.status', ApprovalStatus::PENDING); $query->where('cooperation_media.status', ApprovalStatus::PENDING);
} }
public function company(): BelongsTo public function announcementMedias(): HasMany
{ {
return $this->belongsTo(Company::class); return $this->hasMany(AnnouncementMedia::class);
}
public function journalists(): HasMany
{
return $this->hasMany(Journalist::class);
} }
public function announcements(): BelongsToMany public function announcements(): BelongsToMany
@ -98,18 +93,21 @@ public function announcements(): BelongsToMany
return $this->belongsToMany(Announcement::class, 'announcement_media'); return $this->belongsToMany(Announcement::class, 'announcement_media');
} }
public function company(): BelongsTo
{
return $this->belongsTo(Company::class);
}
public function cooperationMedias(): HasMany
{
return $this->hasMany(CooperationMedia::class);
}
public function cooperationProposals(): HasMany public function cooperationProposals(): HasMany
{ {
return $this->hasMany(CooperationProposal::class); return $this->hasMany(CooperationProposal::class);
} }
public function taskAssignments(): BelongsToMany
{
return $this->belongsToMany(TaskAssignment::class, 'task_assignment_media')
->withPivot(['status'])
->withTimestamps();
}
public function cooperations(): BelongsToMany public function cooperations(): BelongsToMany
{ {
return $this->belongsToMany(Cooperation::class, 'cooperation_media') return $this->belongsToMany(Cooperation::class, 'cooperation_media')
@ -117,8 +115,20 @@ public function cooperations(): BelongsToMany
->withTimestamps(); ->withTimestamps();
} }
public function cooperationMedias(): HasMany public function journalists(): HasMany
{ {
return $this->hasMany(CooperationMedia::class); return $this->hasMany(Journalist::class);
}
public function mediaTaskAssignments(): HasMany
{
return $this->hasMany(MediaTaskAssignment::class);
}
public function taskAssignments(): BelongsToMany
{
return $this->belongsToMany(TaskAssignment::class, 'media_task_assignment')
->withPivot(['status'])
->withTimestamps();
} }
} }

View File

@ -8,6 +8,7 @@
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Swindon\FilamentHashids\Traits\HasHashid; use Swindon\FilamentHashids\Traits\HasHashid;
@ -41,4 +42,9 @@ public function classification(): BelongsTo
{ {
return $this->belongsTo(Classification::class); return $this->belongsTo(Classification::class);
} }
public function issueManagements(): HasMany
{
return $this->hasMany(IssueManagement::class);
}
} }

View File

@ -6,6 +6,7 @@
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Swindon\FilamentHashids\Traits\HasHashid; use Swindon\FilamentHashids\Traits\HasHashid;
@ -23,6 +24,11 @@ protected function casts(): array
]; ];
} }
public function issueManagements(): HasMany
{
return $this->hasMany(IssueManagement::class);
}
public function location(): BelongsTo public function location(): BelongsTo
{ {
return $this->belongsTo(Location::class); return $this->belongsTo(Location::class);

View File

@ -44,7 +44,7 @@ public function mediaTaskAssignments(): HasMany
return $this->hasMany(MediaTaskAssignment::class); return $this->hasMany(MediaTaskAssignment::class);
} }
public function partnerMedia(): BelongsToMany public function partnerMedias(): BelongsToMany
{ {
return $this->belongsToMany(PartnerMedia::class, 'media_task_assignment') return $this->belongsToMany(PartnerMedia::class, 'media_task_assignment')
->withPivot(['status']) ->withPivot(['status'])

View File

@ -8,6 +8,7 @@
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Swindon\FilamentHashids\Traits\HasHashid; use Swindon\FilamentHashids\Traits\HasHashid;
@ -39,6 +40,11 @@ protected function inactive(Builder $query): void
public function mediaMonitorings(): BelongsToMany public function mediaMonitorings(): BelongsToMany
{ {
return $this->belongsToMany(MediaMonitoring::class); return $this->belongsToMany(MediaMonitoring::class, 'media_monitoring_theme');
}
public function mediaMonitoringThemes(): HasMany
{
return $this->hasMany(MediaMonitoringTheme::class);
} }
} }