Невозможно обновить кортеж более одного раза с помощью Laravel Query Builder

Я вызываю метод входа в систему с вводом json (поля ввода json: mobile, userType, deviceId и deviceType). Что я делаю с этой функцией, так это то, что если пользователь с введенным номером мобильного телефона существует, сведения об устройстве (deviceId и deviceType) должны быть обновлены, иначе, если такого пользователя не существует, должен быть создан новый пользователь, и все его данные должны быть внесен в базу данных. Текущий кортеж должен быть возвращен в любом случае. Также возвращаются ошибки, если таковые имеются.

Проблема, с которой я столкнулся, заключается в том, что когда я вставляю номер мобильного телефона уже существующего пользователя (с новым идентификатором устройства и типом устройства), он обновляет этого пользователя (по мере необходимости). Но когда я делаю это снова, он возвращает мне «Ошибка обновления сведений об устройстве». Не могу понять, как это возможно, что конкретный запрос выполняется правильно в первый раз, но не после этого. Помогите пожалуйста мне. Заранее спасибо.

public function login($data){
    $returnData = new \stdClass();
    if(empty($data['mobile']) || empty($data['userType'])) {
        $returnData->response = "error";
        $returnData->message = "Insufficient Input";

        return json_encode($returnData);
    }
    $recd = DB::table('users')
    ->where('mobile',$data['mobile'])
    ->where('userType',$data['userType'])
    ->first();

    if(!empty($recd)){//user exists, just return the values
        if(isset($data['mobile'])){
            $updateDeviceDetails = DB::table('users')
                                ->where('mobile',$data['mobile'])
                                ->update(['deviceId'=>$data['deviceId'], 'deviceType'=>$data['deviceType']]);
        } else {
            echo "mobile not set.";
        }
        if($updateDeviceDetails){
            $updatedUser = DB::table('users')
                            ->where('id',$recd->id)
                            ->get();
            $returnData->response = "success";
            $recd->isNewUser = "0";
            $returnData->data = $updatedUser;

            return json_encode($returnData);
        } else {
            $returnData->response = "error";
            $returnData->message = "Error updating the device details.";

            return json_encode($returnData);
        }
    } else {//user does not exist, create new user
        if(empty($data['deviceId']) || empty($data['accessToken']) || empty($data['deviceType'])){
            $returnData->response = "error";
            $returnData->message = "Insufficient Input";
            return json_encode($returnData);
        }
        $data['created_at'] = $data['updated_at'] = Carbon::now('Asia/Kolkata');
        $data['otp'] = mt_rand(100000, 999999);
        $data['otpStatus'] = 0;
        $data['userType'] = 1;
        //insert new user
        $newUserId = DB::table('users')->insertGetId($data);
        if ($newUserId>0) {

            //get the newly inserted user
            $newUser = DB::table("users")
            ->where('id',$newUserId)
            ->first();

            //newUser is the object to be returned
            $newUser->isNewUser = "1";
            $returnData->response = "success";
            $returnData->data = $newUser;
        } else {
            $returnData->response = "error";
            $returnData->message = "Error creating new user.";
        }
        return json_encode($returnData);
    }
}

person manitgupta672    schedule 27.03.2016    source источник


Ответы (1)


$updateDeviceDetails содержит true или 1 только тогда, когда что-то обновляется в кортеже. Если мы снова вставим те же значения для всех полей, которые нужно обновить, он вернет false.

Я передал значения, которые уже существовали в этом кортеже, для соответствующих столбцов функции обновления и, следовательно, не были верны в $updateDeviceDetails.

person manitgupta672    schedule 28.03.2016