【问题标题】:How to optimaze looping , get data from Mysql Lumen如何优化循环,从 Mysql Lumen 获取数据
【发布时间】:2021-05-25 03:11:56
【问题描述】:

我在成员数据和关注者数据之间加入数据,我想检查关注者数据是否在数据库中,如果不存在则表示他们不是关注者,但我创建的代码导致一个漫长的过程。当我访问 getStatus2 函数时,进程变慢了

怎么做,让我创建的代码可以快速处理数据?

    public function ListFollowers($member_id)
{
    
        $get_data=DB::table('member_sso')
           ->leftJoin('klaklik_member_followers', 'member_sso.member_sso_id', '=', 'klaklik_member_followers.following_id')
        //    ->leftJoin('klaklik_member_profile', 'klaklik_member_followers.following_id', '=', 'klaklik_member_profile.member_id')
            ->select('first_name','last_name','following_id','cover','klaklik_member_followers.created_date as following_date')
            ->where('klaklik_member_followers.member_id',$member_id)
            ->get();
          
        if (count($get_data)>0) {
            foreach($get_data as $key=>$value){
             
                    // $peccah=json_decode($value->profile_data);
                    $array['MEMBER_ID']=$value->following_id;
                    $array['USERNAME']=$value->first_name." ".$value->last_name;
                    if (empty($value->cover)) {
                        $array['MEMBER_IMAGE']='https://www.klaklik.com/assets/images/profile.png';
                    } else {
                        $array['MEMBER_IMAGE']="https://cdn-prv-city.klaklik.com/".$value->cover;  
                       
                    }
                   
                    $array['FOLLOWING_DATE']=$value->following_date;
                    $status=$this->getStatus2($value->following_id,$member_id);
                    if (count($status)>0) {
                       $array['STATUS']='0';
                       $array['STATUS_DEC']='FOLLOWING YOU';
                    }else{
                        $array['STATUS']='1';
                        $array['STATUS_DEC']='NOT FOLLOW YOU';
                    }
                    $result[]=$array;
                }   
        $response=$result;
        $data["STATUS"]=200;
        $data["MESSAGE"]="FOLLOWING DATA";
        $data["DATA"]=$response;
        
        }else{
            $data["STATUS"]=404;
            $data["MESSAGE"]="YOU HAVE NO FOLLOWERS";
            $data["DATA"]=(object) array();
        }
    return json_encode($data);
}

   public function getStatus2($member_id,$following_id){
    $get_data=DB::table('klaklik_member_followers')
                ->where('klaklik_member_followers.member_id',$member_id)
                ->where('klaklik_member_followers.following_id',$following_id)
                ->first();
    return $get_data;
}   

【问题讨论】:

  • 为什么不改用Eloquent
  • 我用的是 Eloquent 还是一样,这个过程需要很长时间@rkg
  • 使用 Eloquent 就不用循环了。
  • 你能给我举个例子吗? @rkg

标签: laravel lumen


【解决方案1】:

你可以将 getStatus2 函数更改为 in_array()

获取所有成员的following_ids,然后检查$value->following_id在following_ids中。

【讨论】:

  • 你能给我举个例子吗? @bjfuzzj
【解决方案2】:

您不需要循环来查询所有这些。使用 Laravel Eloquent。你只需要像这样设置正确的关系:

public function childrenRelationships()
{
    return $this->hasMany('Children', 'child_parent', 'child_id');
}

public function allChildrenRelationships()
{
    return $this->childrenRelationships()->with('allChildrenRelationships');
}

然后像这样调用Controller 上的关系:

public function getData($id)
{
    $model = Model::find($id)->with('allChildrenRelationships');
}

【讨论】:

    猜你喜欢
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 2015-06-09
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多