我在Laravel中使用MongoDB.我有一个叫categories
有一个文档的集合
[ { "_id": "567dc4b4279871d0068b4568", "name": "Fashion", "images": "http://example.com/1.jpg", "specifics": [ "made" ], "brands": [ { "name": "Giordano", "logo": "http://example.com/" }, { "name": "Armani", "logo": "http://example.com/" } ], "updated_at": "2015-12-25 22:40:44", "created_at": "2015-12-25 22:35:32" } ]
我正在尝试创建一个函数,在上面的文档中添加特定数组的细节.
这是我的请求机构的方式
HTTP: POST { "specifics": [ "material" ] }
我正在使用以下功能处理此请求
/** * Add specs to category * @param string $category_id * @return Illuminate\Http\JsonResponse */ public function addSpecifics($category_id) { $category = $this->category->findOrFail($category_id); $category->specifics[] = $this->request->get('specifics'); $status_code = config('http.UPDATED'); return response()->json($category->save(), $status_code); }
但是当我打这个电话时,我得到了错误
CategoryController.php第101行中的ErrorException:间接修改重载属性App\Category :: $ specifics无效
请帮我解决这个问题.
我正在使用https://github.com/jenssegers/laravel-mongodb这个包用于MongoDB.
由于在Eloquent中如何访问模型属性,当您访问$ category-> specifics时,会调用magic __get()方法,该方法返回该属性值的副本.因此,当您向该副本添加元素时,您只是更改副本,而不是原始属性的值.这就是为什么你得到一个错误,说无论你做什么,它都没有任何影响.
如果要向$ category-> specifics数组添加新元素,则需要确保通过以setter方式访问属性来使用magic __set(),例如:
$category->specifics = array_merge($category->specifics, $this->request->get('specifics'));