间接修改重载属性App \ Dossier :: $ program无效

时间:2018-04-03 07:05:59

标签: php mongodb laravel

美好的一天我在后端有这个代码(试图在MONGO中更新这个值) http://prntscr.com/j03gh4

$dossier=Dossier::where('_id',(int)$request->input('dossier_id'))->first();
//var_dump($request->input('value'));
$dossier->program[$request->input('program')]['cities']
 [$request->input('city')]['services']
 [$request->input('service')][$request->input('name')]=$request->input('value');
$dossier->save();

但是我收到了这个例外 http://prntscr.com/j03h0s

  

间接修改重载属性App \ Dossier :: $ program无效

我有什么办法来修复这种情况?

1 个答案:

答案 0 :(得分:3)

问题是调用$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();