'date', 'end_date_estimated' => 'date', ]; // Relationships public function phases() { return $this->hasMany(Phase::class)->orderBy('order'); } public function layers() { return $this->hasMany(Layer::class); } public function users() { return $this->belongsToMany(User::class)->withPivot('role_in_project'); } public function creator() { return $this->belongsTo(User::class, 'created_by'); } public function media() { return $this->morphMany(Media::class, 'mediable'); } public function images() { return $this->morphMany(Media::class, 'mediable')->where('category', 'image'); } // Scope to filter accessible projects for non-admin users public function scopeAccessibleBy($query, User $user) { if ($user->hasRole('Admin')) { return $query; } return $query->whereHas('users', function ($q) use ($user) { $q->where('user_id', $user->id); }); } }