'date', 'final_submission_date' => 'date', 'payment_amount' => 'integer', 'payment_date' => 'date', 'completed_at' => 'date', 'status' => CooperationStatus::class, ]; } #[Scope] protected function pending(Builder $query): void { $query->where('status', CooperationStatus::PENDING); } #[Scope] protected function assignment(Builder $query): void { $query->where('status', CooperationStatus::ASSIGNMENT); } #[Scope] protected function payment(Builder $query): void { $query->where('status', CooperationStatus::PAYMENT); } #[Scope] protected function completed(Builder $query): void { $query->where('status', CooperationStatus::COMPLETED); } public function cooperationMedia(): HasMany { return $this->hasMany(CooperationMedia::class); } public function partnerMedia(): BelongsToMany { return $this->belongsToMany(PartnerMedia::class, 'cooperation_media') ->using(CooperationMedia::class) ->withPivot(['status']) ->withTimestamps(); } public function payments(): HasManyThrough { return $this->hasManyThrough( CooperationPayment::class, CooperationMedia::class, 'cooperation_id', 'cooperation_media_id' ); } public function proposal(): HasMany { return $this->hasMany(CooperationProposal::class); } public function reports(): HasManyDeep { return $this->hasManyDeep( Report::class, [TaskAssignment::class, MediaTaskAssignment::class], ['cooperation_id', 'task_assignment_id', 'media_task_assignment_id'], ['id', 'id', 'id'] ); } public function taskAssignment(): HasOne { return $this->hasOne(TaskAssignment::class); } }