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\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Swindon\FilamentHashids\Traits\HasHashid;
@ -36,7 +37,12 @@ protected function company(Builder $query): void
$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');
}

View File

@ -46,4 +46,9 @@ public function contentRecaps(): HasMany
{
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\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;
use Spatie\MediaLibrary\HasMedia;
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
{
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\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
@ -63,30 +62,30 @@ protected function completed(Builder $query): void
$query->where('status', CooperationStatus::COMPLETED);
}
public function proposal(): HasOne
{
return $this->hasOne(CooperationProposal::class);
}
public function taskAssignment(): HasOne
{
return $this->hasOne(TaskAssignment::class);
}
public function cooperationMedia(): HasMany
public function cooperationMedias(): HasMany
{
return $this->hasMany(CooperationMedia::class);
}
public function partnerMedia(): BelongsToMany
public function partnerMedias(): BelongsToMany
{
return $this->belongsToMany(PartnerMedia::class, 'cooperation_media')
->withPivot(['status'])
->withTimestamps();
}
public function proposals(): HasMany
{
return $this->hasMany(CooperationProposal::class);
}
public function reports(): HasManyThrough
{
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\Factories\HasFactory;
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\Pivot;
use Spatie\MediaLibrary\HasMedia;
@ -57,13 +57,13 @@ public function partnerMedia(): BelongsTo
return $this->belongsTo(PartnerMedia::class);
}
public function payments(): HasMany
{
return $this->hasMany(CooperationPayment::class, 'cooperation_media_id');
}
public function rejectionReasons(): MorphMany
{
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
{
return $this->hasMany(SubLocation::class);

View File

@ -5,7 +5,7 @@
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
@ -17,13 +17,18 @@ class MediaMonitoring extends Model implements HasMedia
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);
}
public function company(): BelongsTo
public function announcementMedias(): HasMany
{
return $this->belongsTo(Company::class);
}
public function journalists(): HasMany
{
return $this->hasMany(Journalist::class);
return $this->hasMany(AnnouncementMedia::class);
}
public function announcements(): BelongsToMany
@ -98,18 +93,21 @@ public function announcements(): BelongsToMany
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
{
return $this->hasMany(CooperationProposal::class);
}
public function taskAssignments(): BelongsToMany
{
return $this->belongsToMany(TaskAssignment::class, 'task_assignment_media')
->withPivot(['status'])
->withTimestamps();
}
public function cooperations(): BelongsToMany
{
return $this->belongsToMany(Cooperation::class, 'cooperation_media')
@ -117,8 +115,20 @@ public function cooperations(): BelongsToMany
->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\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Swindon\FilamentHashids\Traits\HasHashid;
@ -41,4 +42,9 @@ public function classification(): BelongsTo
{
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\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
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
{
return $this->belongsTo(Location::class);

View File

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

View File

@ -8,6 +8,7 @@
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Swindon\FilamentHashids\Traits\HasHashid;
@ -39,6 +40,11 @@ protected function inactive(Builder $query): void
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);
}
}