Я вызываю метод входа в систему с помощью ввода json (поля на входе json: mobile, userType, deviceId и deviceType). Что я делаю с этой функцией, так это то, что если пользователь с введенным номером мобильного телефона существует, данные устройства (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);
}
}
$updateDeviceDetails
содержит true или 1, только когда что-то обновляется в кортеже. Если мы снова вставим одинаковые значения для всех полей, которые будут обновлены, он вернет false.
Я давал значения, которые уже существовали в этом кортеже, для их соответствующих столбцов, функции обновления и, следовательно, не выполнялся в $updateDeviceDetails
,
Других решений пока нет …