无法使用Laravel Query Builder多次更新元组

时间:2016-03-27 20:08:54

标签: php laravel laravel-query-builder

我正在调用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);
    }
}

1 个答案:

答案 0 :(得分:0)

只有在元组中更新某些内容时,$updateDeviceDetails才包含true或1。如果我们再次为要更新的所有字段插入相同的值,它将返回false。

我将这个元组中已经存在的值(对于各自的列)赋予更新函数,因此在$updateDeviceDetails中没有实现。