Проблемът е, че извикването на $dossier->program
всъщност не осъществява достъп до свойството директно в модели от тип Eloquent, а по-скоро извиква __get
метод.
Този метод get не връща препратка към свойството. Това, което трябва да направите, е да вземете оригиналното свойство, да го промените и след това да го върнете обратно:
$dossier=Dossier::where('_id',(int)$request->input('dossier_id'))->first();
$originalProgram = $dossier->program;
$originalProgram[$request->input('program')]['cities'][$request->input('city')]['services'][$request->input('service')][$request->input('name')]=$request->input('value');
$dossier->program = $originalProgram;
$dossier->save();