leftJoin("team_members", "projects.id", "=", "team_members.project_id") ->when($id == null, fn($query) => $query->filter(request()->query())) ->when($id, fn($query) => $query->where("projects.id", $id)) ->where(function ($query) { $query->where("team_members.user_id", Auth::id()) ->orWhere(fn($query) => $query->where("projects.acl", ProjectACL::CUSTOM->value)->where("whitelist", "like", "%,".Auth::id().",%")); }) ->pluck("projects.id") ->unique(); $query->whereIn("id", $projectIds->toArray()); } public function plans(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { return $this->belongsToMany(Plan::class, 'project_plan'); } public function assets(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { return $this->belongsToMany(Asset::class, 'project_asset'); } public function requirements(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { return $this->belongsToMany(Requirement::class, 'project_requirement'); } public function teamMembers(): \Illuminate\Database\Eloquent\Relations\HasMany { return $this->hasMany(TeamMember::class); } public function tasks(): \Illuminate\Database\Eloquent\Relations\HasMany { return $this->hasMany(Task::class); } public function requirementsGroup(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { return $this->belongsToMany(RequirementGroup::class, 'project_requirement'); } public function library(){ return $this->hasMany(Library::class ,'project_id')->where('type', 'project'); } }