'boolean']; } public function organization(): BelongsTo { return $this->belongsTo(Organization::class, 'organization_id'); } public function branch(): BelongsTo { return $this->belongsTo(Branch::class, 'branch_id'); } /** * Explicitly assigned branches (telemedicine may include several). Empty = unassigned. */ public function branches(): BelongsToMany { return $this->belongsToMany(Branch::class, 'care_practitioner_branch', 'practitioner_id', 'branch_id') ->withTimestamps(); } public function department(): BelongsTo { return $this->belongsTo(Department::class, 'department_id'); } public function member(): BelongsTo { return $this->belongsTo(Member::class, 'member_id'); } public function schedules(): HasMany { return $this->hasMany(PractitionerSchedule::class, 'practitioner_id'); } public function appointments(): HasMany { return $this->hasMany(Appointment::class, 'practitioner_id'); } /** * @return list */ public function assignedBranchIds(): array { $ids = $this->relationLoaded('branches') ? $this->branches->pluck('id')->all() : $this->branches()->pluck('care_branches.id')->all(); if ($ids === [] && $this->branch_id) { return [(int) $this->branch_id]; } return array_values(array_unique(array_map('intval', $ids))); } /** * @param list $branchIds */ public function syncAssignedBranches(array $branchIds): void { if (! \Illuminate\Support\Facades\Schema::hasTable('care_practitioner_branch')) { $ids = array_values(array_unique(array_filter(array_map('intval', $branchIds)))); $this->forceFill(['branch_id' => $ids[0] ?? null])->save(); return; } $ids = array_values(array_unique(array_filter(array_map('intval', $branchIds)))); $this->branches()->sync($ids); $this->forceFill([ 'branch_id' => $ids[0] ?? null, ])->save(); } }