当前位置:  开发笔记 > 编程语言 > 正文

间接修改重载属性Laravel MongoDB

如何解决《间接修改重载属性LaravelMongoDB》经验,为你挑选了1个好方法。

我在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.



1> jedrzej.kury..:

由于在Eloquent中如何访问模型属性,当您访问$ category-> specifics时,会调用magic __get()方法,该方法返回该属性值的副本.因此,当您向该副本添加元素时,您只是更改副本,而不是原始属性的值.这就是为什么你得到一个错误,说无论你做什么,它都没有任何影响.

如果要向$ category-> specifics数组添加新元素,则需要确保通过以setter方式访问属性来使用magic __set(),例如:

$category->specifics = array_merge($category->specifics, $this->request->get('specifics'));

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有