data['photo'] = $photo; } public function processMobile($mobile) { $visitor = VisitorEntry::where('mobile_number', $mobile)->latest()->first(); if ($visitor) { $employee = EmployeeMaster::where('id', $visitor->employee_master_id)->first(); $this->form->fill([ 'mobile_number' => $mobile ?? '', 'name' => $visitor->name ?? '', 'company' => $visitor->company ?? '', 'type' => $visitor->type ?? '', 'department' => $employee->department ?? '', 'employee_master_id' => $visitor->employee_master_id->name ?? '', 'code' => $employee->code ?? '', ]); } else { $this->form->fill([ 'mobile_number' => $mobile ?? '', 'name' => $visitor->name ?? '', 'company' => $visitor->company ?? '', 'type' => $visitor->type ?? '', 'department' => $employee->department ?? '', 'employee_master_id' => $visitor->employee_master_id->name ?? '', 'code' => $employee->code ?? '', ]); } } protected function mutateFormDataBeforeCreate(array $data): array { if ( !empty($data['photo']) && str_starts_with($data['photo'], 'data:image') ) { // Step A: Strip the "data:image/jpeg;base64," prefix $imageData = explode(',', $data['photo'])[1]; // Step B: Generate a unique filename $filename = 'visitor_' . time() . '_' . uniqid() . '.jpg'; // Step C: Decode Base64 and save as a real .jpg file $path = 'visitor-photos/' . $filename; Storage::disk('public')->put($path, base64_decode($imageData)); // Step D: Replace the Base64 string with just the file path $data['photo'] = $path; } return $data; } }