我正在调用login方法,输入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);
}
}
答案 0 :(得分:0)
只有在元组中更新某些内容时,$updateDeviceDetails
才包含true或1。如果我们再次为要更新的所有字段插入相同的值,它将返回false。
我将这个元组中已经存在的值(对于各自的列)赋予更新函数,因此在$updateDeviceDetails
中没有实现。