1

入力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);
    }
}
4

1 に答える 1

0

には$updateDeviceDetails、タプルで何かが更新された場合にのみ true または 1 が含まれます。更新するすべてのフィールドに同じ値を再度挿入すると、false が返されます。

このタプルに既に存在する値を、それぞれの列に対して update 関数に与えていたため、 では true になりませんでした$updateDeviceDetails

于 2016-03-28T03:26:33.100 に答える