【问题标题】:Indirect modification of overloaded property App\Dossier::$program has no effect间接修改重载属性 App\Dossier::$program 无效
【发布时间】:2018-04-03 15:22:29
【问题描述】:

Good Day 我在后端有这段代码(试图在 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 无效

我该怎么做才能修复这种情况?

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及重现它所需的最短代码在问题本身。没有明确问题陈述的问题对其他读者没有用处。见:How to create a Minimal, Complete, and Verifiable example.
  • 很抱歉,但如果您知道为什么会出现此异常,请解释一下。我不明白这就是我问的原因。我只是寻求帮助。你为什么这么拘谨和自鸣得意?
  • 在问题中包含异常消息对您来说太难了吗?你真的需要引导你去第三方服务吗?另外,假设从现在起 5 年后,当有人遇到同样的问题并发现这个问题时,您真的相信该 3rd 方服务仍会存储您的屏幕截图吗?
  • 好的,我发布异常消息 Just Screen 提供了所有图片:)
  • 上帝保佑 StackOverflow :)

标签: php mongodb laravel


【解决方案1】:

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

【讨论】:

  • 非常感谢 Apokrifos 先生 :)
  • 伟大的解释!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
相关资源
最近更新 更多