公共函数 getProfiles($account_id)

问题描述 投票:0回答:1

好的,我有一个系统,可以生成与以下内容相关的客户的订阅:

    服务,.
  1. 属于该服务的帐户(电子邮件)。
  2. 与帐户相关的个人资料。 所有这些都与客户端相关联,但为了能够在订阅时看到它,所有这些都与经过身份验证的用户保持联系。
我在获取配置文件时遇到的问题。

在我的帐户表中,我有一个名为 sale_type 的字段,它只能有 2 个选项: “完整”和“个人资料”

我有获取与 service_id 关联的帐户的函数,因此我可以获得与 account_id 关联的配置文件。

当账户的 sale_type = 'complete' 时;其关联的配置文件通过 account_id 链接,而 account_id 在帐户表中又具有 user_id(帐户持有者)。

但是当账户有 sale_type = 'profile' 时;它的配置文件通过配置文件表中名为 user_id 的字段与用户关联。

这样;如果帐户是 sale_type = 'complete 并且您想要订阅,您将获得与该帐户关联的所有配置文件,而如果帐户是 sale_type = 'profile',您将仅获得属于该帐户的配置文件,其中user_id(来自配置文件表)是经过身份验证的用户。

配置文件表

在下图中,我可以选择服务,我可以选择条件 sale_type = 'complete' 的邮件 (mabeliñ

[email protected]),然后我可以看到它具有的配置文件。

订阅视图

但是,当我选择条件 sale_type = 'profile' 的帐户时,它不会向我显示该帐户代表经过身份验证的用户所拥有的配置文件。

订阅视图

我有下面的功能,显示帐户 sale_type= 'complete' 中的配置文件,但不显示帐户 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]); }
我尝试将功能更改为:

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]); }
这样我可以看到帐户 sale_type= 'profile' 的配置文件,但它不会让我看到帐户 sale_type='complete' 的配置文件:(

我可以看到属于我的个人资料

对于“完整”帐户,我看不到个人资料

我需要帮助,以允许我根据 sale_type 显示配置文件,因为目前如果我使用一种方法,我可以看到 sale_type='complete' 而其他方法则看不到。如果我更改功能,我可以看到帐户 sale_type='profile' 而其他帐户则看不到:(

我的助手功能:

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; } }
    
php laravel function
1个回答
0
投票
如果您对基于经过身份验证的用户的第二个场景使用过滤会怎样?

这是经过修改的代码:

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]); }
我希望这对你有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.