Обновление и отключение не работает MongoDB и Laravel - PullRequest
0 голосов
/ 30 апреля 2018

Я новичок в 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
    }
]

Буду очень признателен за любые советы, помощь и предложения.

Спасибо:)

1 Ответ

0 голосов
/ 30 апреля 2018

Изменить код доступа на


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

Изменить код сброса на


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

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

...