Добрый день, у меня есть этот код на бэкэнде (пытаюсь обновить это значение в 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
Что мне делать, чтобы исправить эту ситуацию?
Извините, но если вы знаете, почему присутствует это исключение, пожалуйста, объясните. Я не понимаю Вот почему я спрашиваю. И я просто прошу помощи. Почему ты такой чопорный и самодовольный?
Вам слишком сложно включить сообщение об исключении в вопрос? Вам действительно нужно направить вас на сторонние сервисы? А также, скажем, через 5 лет, когда кто-то столкнется с такой же проблемой и найдет этот вопрос, действительно ли вы доверяете этой сторонней службе, чтобы сохранить ваш снимок экрана?
Хорошо, я публикую сообщение об исключении. Просто экран дает полную картину :)
Боже, благослови StackOverflow :)
Добавление сообщения об исключении гарантирует, что если кто-то наберет в Google «модификация mongo indicrect не имеет эффекта», этот вопрос появится, потому что он будет проиндексирован.






Проблема в том, что вызов $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();
Большое спасибо, господин Апокрифос :)
Отличное объяснение! Большое спасибо!
Вопросы, требующие помощи по отладке ("почему этот код не работает?"), должны включать желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для ее воспроизведения в самом вопросе. Вопросы без четкой постановки проблемы не будут полезны другим читателям. См .: Как создать минимальный, полный и проверяемый пример.