0

我是新手MongoDB,我正在使用jenssegers/laravel-mongodb包来构建 API。

我在更新和删除数组中的记录时遇到问题。

这是我使用 foreach 的更新代码

foreach ($event->volunteers as $key => $volunteer) {
   if ($volunteer['user_id'] == $request->user_id) {
      $event->where('volunteers.user_id', $request->user_id)
          ->update(["volunteers.$key.attendance_status" => $request->attendance_status
                ]);
      }
}

这是与 Pull 相同的代码

 Event::where('volunteers.user_id', $request->user_id)->push('volunteers', [
            'attendance_status' => $request->attendance_status
            ], true);

这是未设置的代码

foreach ($event->volunteers as $key => $volunteer) {
            if ($volunteer['user_id'] == $request->user_id) {
                $event->where('volunteers.user_id', $request->user_id)
                    ->unset(
                        "volunteers.$key.attendance_status");
            }
        }

他们都没有工作

我的数据库结构是

 "volunteers" : [
    {
        "user_id" : NumberInt(1), 
        "name" : "Prafful K Panwar", 
        "skills" : [
            "Plumber", 
            "Carpenter"
        ], 
        "incentives" : {
            "tshirt_size" : "XXL"
        }, 
        "ready_to_contribute_min_amount" : "Yes", 
        "attendance_status" : false
    }, 
    {
        "user_id" : NumberInt(2), 
        "name" : "Prafful Panwar", 
        "skills" : [
            "Plumber"
        ], 
        "incentives" : {
            "tshirt_size" : "XXL"
        }, 
        "ready_to_contribute_min_amount" : "Yes", 
        "attendance_status" : false
    }
]

任何建议、帮助和建议将不胜感激。

谢谢 :)

4

1 回答 1

0

将拉取代码更改为

    事件::where('volunteers.user_id', $request->input('user_id'))->push('volunteers', ['attendance_status' => $request->input('attendance_status')
                ], 真的);

将未设置的代码更改为

    $userId = $request->input('user_id');

    foreach ($event->volunteers as $key => $volunteer) {
        if ($volunteer['user_id'] == $userId) {
            $event->where('volunteers.user_id', $userId)
                ->unset("志愿者.$key.attendance_status");
        }
    }

于 2018-04-30T14:38:32.757 回答