php - 间接修改重载属性 App\Dossier::$program 没有效果

标签 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

Indirect modification of overloaded property App\Dossier::$program has no effect

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

最佳答案

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

关于php - 间接修改重载属性 App\Dossier::$program 没有效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49624156/

相关文章:

php - 如何在 facebook graph API 的描述中添加换行符或回车符

mongodb - Openshift Pod Storage Mongodb - 下载卷

arrays - 如何在mongo shell查询中仅投影嵌套数组的匹配字段

php - 拉维尔 |在 Notify 中传递变量

php - 如何在 Composer 中仅更改一个包的最低稳定性

javascript - 让这个计时器从一个按钮开始

php - 加载 xdebug.so undefined symbol zend_sort 失败

node.js - 带有 mongo/node 的多语言界面和内容

php - 是否可以从另一个包覆盖 laravel 包 View

php - 测试受 Laravel 5.3 保护的 API