最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

php - public function getProfiles($account_id) - Stack Overflow

matteradmin7PV0评论

OK I have a system that generates subscriptions from customers related to

  1. Service,.
  2. Account (email) belonging to that service.
  3. Profile related to the account. All this is associated to a client, but to be able to see it at the time of the subscription all this keeps relation to the authenticated user.

The problem I have it when obtaining the profiles.

In my Accounts table I have a field called sale_type that can have only 2 options: 'complete' and 'profile'

I have functions to get the accounts associated to a service_id, so I can get the profiles associated to an account_id.

When an account has sale_type = 'complete'; its associated profiles are linked through the account_id which in turn has a user_id (account holder) in the accounts table.

But when an account has sale_type = 'profile”; its profiles are associated to the user through a field called user_id in the profiles table.

In this way; if an account is sale_type = 'complete and you want to make a subscription, you will get all the profiles associated to that account, while if an account is sale_type = 'profile' you will get only the profiles belonging to that account in which the user_id (from the profiles table) is the authenticated user.

profiles table

In the following image I can select the Service, I can select a mail (mabeliñ[email protected]) with the condition sale_type = 'complete', and then I can see the profiles it has.

subscription view

But when I choose an account with the condition sale_type = 'profile', it does not show me the profiles that the account has on behalf of the authenticated user.

subscripton view

I have the function below that shows me the profiles in the accounts sale_type= 'complete' but does not show the profiles in the accounts sale_type= 'profile'.

public function getProfiles($account_id){
        $data = [];

        // Obtener la cuenta con el id de cuenta dado
        $account = Account::find($account_id);

        // Comprobar si la cuenta existe
        if ($account) {
            $attr = [
                'table' => 'profiles',
                'columns' => [
                    'id',
                    'name',
                    'pin',
                    'user_id' // Agregar user_id para obtener este campo también
                ],
                'compare' => 'account_id',
                'compare_value' => $account_id
            ];
            $response = Helper::getDataSelect($attr);

            // Verificar el sale_type de la cuenta
            if ($account->sale_type == 'complete') {
                // Si sale_type es 'complete', mostrar todos los perfiles
                $data = $response;
            } else if ($account->sale_type == 'profile') {
                // Si sale_type es 'profile', mostrar solo los perfiles para el usuario actual
                if (count($response) > 0){
                    foreach ($response as $res){
                        $profile = Profile::find($res->id);

                        if ($profile && $profile->subscriptions->count() == 0) {
                            if ($profile->user_id == Auth::user()->id) {
                                array_push($data, $res);
                            } 
                        }
                    }
                }
            }
        }

        return response()->json(['data' => $data]);
    }

I have tried changing the function to this:

public function getProfiles($account_id){
    $data = [];
    $attr = [
        'table'=>'profiles',
        'columns'=>[
            'id',
            'name',
            'pin'
        ],
        'compare'=>'account_id',
        'compare_value'=>$account_id
    ];
    $response = Helper::getDataSelect($attr);
    if(count($response) > 0){
        foreach($response as $res){
            $profile = Profile::find($res->id);
            if($profile->subscriptions->count() == 0){

                if($profile->user_id == Auth::user()->id){
                    array_push($data, $res);
                }
            }
        }
    }

    return response()->json(['data'=>$data]);
}

This way it lets me see the profiles of the account sale_type= 'profile' but it does not let me see the profiles of the accounts sale_type='complete' :(

I can see the profiles that belong to me

and for the 'full' account I don't see the profiles

I need help, to allow me to show the profiles depending on the sale_type, because currently if I use one method I can see the sale_type='complete' and the others not. and if I change the function I can see the accounts sale_type='profile' and the others not :(

esta es mi funcion en el Helper:

public static function getDataSelect($attr, $validateUser=false){
            if($attr){
                if($validateUser){
                    $data = DB::table($attr['table'])->select($attr['columns'])->where($attr['compare'],$attr['compare_value'])->where('user_id',Auth::user()->id)->get();
                }else{
                    $data = DB::table($attr['table'])->select($attr['columns'])->where($attr['compare'],$attr['compare_value'])->get();
                }

                return $data;
            }else{
                return null;
            }

        }

OK I have a system that generates subscriptions from customers related to

  1. Service,.
  2. Account (email) belonging to that service.
  3. Profile related to the account. All this is associated to a client, but to be able to see it at the time of the subscription all this keeps relation to the authenticated user.

The problem I have it when obtaining the profiles.

In my Accounts table I have a field called sale_type that can have only 2 options: 'complete' and 'profile'

I have functions to get the accounts associated to a service_id, so I can get the profiles associated to an account_id.

When an account has sale_type = 'complete'; its associated profiles are linked through the account_id which in turn has a user_id (account holder) in the accounts table.

But when an account has sale_type = 'profile”; its profiles are associated to the user through a field called user_id in the profiles table.

In this way; if an account is sale_type = 'complete and you want to make a subscription, you will get all the profiles associated to that account, while if an account is sale_type = 'profile' you will get only the profiles belonging to that account in which the user_id (from the profiles table) is the authenticated user.

profiles table

In the following image I can select the Service, I can select a mail (mabeliñ[email protected]) with the condition sale_type = 'complete', and then I can see the profiles it has.

subscription view

But when I choose an account with the condition sale_type = 'profile', it does not show me the profiles that the account has on behalf of the authenticated user.

subscripton view

I have the function below that shows me the profiles in the accounts sale_type= 'complete' but does not show the profiles in the accounts sale_type= 'profile'.

public function getProfiles($account_id){
        $data = [];

        // Obtener la cuenta con el id de cuenta dado
        $account = Account::find($account_id);

        // Comprobar si la cuenta existe
        if ($account) {
            $attr = [
                'table' => 'profiles',
                'columns' => [
                    'id',
                    'name',
                    'pin',
                    'user_id' // Agregar user_id para obtener este campo también
                ],
                'compare' => 'account_id',
                'compare_value' => $account_id
            ];
            $response = Helper::getDataSelect($attr);

            // Verificar el sale_type de la cuenta
            if ($account->sale_type == 'complete') {
                // Si sale_type es 'complete', mostrar todos los perfiles
                $data = $response;
            } else if ($account->sale_type == 'profile') {
                // Si sale_type es 'profile', mostrar solo los perfiles para el usuario actual
                if (count($response) > 0){
                    foreach ($response as $res){
                        $profile = Profile::find($res->id);

                        if ($profile && $profile->subscriptions->count() == 0) {
                            if ($profile->user_id == Auth::user()->id) {
                                array_push($data, $res);
                            } 
                        }
                    }
                }
            }
        }

        return response()->json(['data' => $data]);
    }

I have tried changing the function to this:

public function getProfiles($account_id){
    $data = [];
    $attr = [
        'table'=>'profiles',
        'columns'=>[
            'id',
            'name',
            'pin'
        ],
        'compare'=>'account_id',
        'compare_value'=>$account_id
    ];
    $response = Helper::getDataSelect($attr);
    if(count($response) > 0){
        foreach($response as $res){
            $profile = Profile::find($res->id);
            if($profile->subscriptions->count() == 0){

                if($profile->user_id == Auth::user()->id){
                    array_push($data, $res);
                }
            }
        }
    }

    return response()->json(['data'=>$data]);
}

This way it lets me see the profiles of the account sale_type= 'profile' but it does not let me see the profiles of the accounts sale_type='complete' :(

I can see the profiles that belong to me

and for the 'full' account I don't see the profiles

I need help, to allow me to show the profiles depending on the sale_type, because currently if I use one method I can see the sale_type='complete' and the others not. and if I change the function I can see the accounts sale_type='profile' and the others not :(

esta es mi funcion en el Helper:

public static function getDataSelect($attr, $validateUser=false){
            if($attr){
                if($validateUser){
                    $data = DB::table($attr['table'])->select($attr['columns'])->where($attr['compare'],$attr['compare_value'])->where('user_id',Auth::user()->id)->get();
                }else{
                    $data = DB::table($attr['table'])->select($attr['columns'])->where($attr['compare'],$attr['compare_value'])->get();
                }

                return $data;
            }else{
                return null;
            }

        }
Share Improve this question asked Nov 16, 2024 at 8:15 Ricardo GuerraRicardo Guerra 31 bronze badge 1
  • This is an english site. Pls. only english text – Black cat Commented Nov 16, 2024 at 9:25
Add a comment  | 

2 Answers 2

Reset to default 0

What if you use the filtering for your second scenario based on authenticated user?

Here is your code with modifications:

public function getProfiles($account_id) {
    $data = [];
    $account = Account::find($account_id);
    if ($account) {
        $attr = [
            'table' => 'profiles',
            'columns' => [
                'id',
                'name',
                'pin',
                'user_id'
            ],
            'compare' => 'account_id',
            'compare_value' => $account_id
        ];
        $response = Helper::getDataSelect($attr);

        if ($account->sale_type == 'complete') {
            $data = $response;
        } else if ($account->sale_type == 'profile') {
            foreach ($response as $res) {
                if ($res->user_id == Auth::user()->id) {
                    $data[] = $res;
                }
            }
        }
    }
    return response()->json(['data' => $data]);
}

I hope this help you.

I solved the problem this way

public function getProfiles($account_id)
    {
        $data = [];
        $account = Account::find($account_id);

        $attr = [
            'table' => 'profiles',
            'columns' => [
                'id',
                'name',
                'pin',
                'user_id'
            ],
            'compare' => 'account_id',
            'compare_value' => $account_id
        ];
        $response = Helper::getDataSelect($attr);
        if (count($response) > 0) {
            foreach ($response as $res) {
                $profile = Profile::find($res->id);
                if ($profile->subscriptions->count() == 0) {

                    if ($profile->user_id == Auth::user()->id) {
                        array_push($data, $res);
                    } else {
                        if ($account) {
                            if ($account->sale_type == 'complete') {
                                // Si sale_type es 'complete', mostrar todos los perfiles
                                $data = $response;
                            }

                        }
                    }
                }
            }
        }

        return response()->json(['data' => $data]);
    }
Post a comment

comment list (0)

  1. No comments so far