public function getMatchRateAttribute() { $user_skills = UserSkill::with('skill')->where('user_id', '=', $this->user_id)->get()->toArray(); if (count($user_skills) > 0) { $skill_percentage = 0; $job_traits = 0; $user_traits = 0; foreach ($this->job_details->job_skills->load('skill')->toArray() as $job_skill) { $avg_user_job_rate = 0; foreach ($user_skills as $user_skill) { if ($job_skill['skill_id'] == $user_skill['skill_id']) { if ($user_skill['skill']['type'] == 'soft') { $user_traits++; } if ($user_skill['skill']['type'] == 'hard') { if ($user_skill['rate'] >= $job_skill['rate']) { $avg_user_job_rate = 1; } else { $avg_user_job_rate = $user_skill['rate'] / $job_skill['rate']; } $over_all_skill_match = $avg_user_job_rate * 100 * ($job_skill['importance'] / 100); $skill_percentage += $over_all_skill_match; } } } if ($job_skill['skill']['type'] == 'soft') { $job_traits++; } } $trait_percentage = $user_traits / $job_traits * 100 * ($this->job_details->traits_importance / 100); $skill_percentage = $skill_percentage * ((100 - $this->job_details->traits_importance) / 100); return round($trait_percentage + $skill_percentage); } return 0; }
public function getMatchCountAttribute() { $skill_ids = []; foreach ($this->job_skills as $job_skill) { $skill_ids[] = $job_skill['skill_id']; } if (count($skill_ids) > 0) { $user_ids = UserSkill::select(DB::raw('DISTINCT(user_id)'))->whereIn('skill_id', $skill_ids)->get()->toArray(); $lat = $this->job_locations->lat; $lng = $this->job_locations->lng; $users = User::within((int) $this->search_radius, 'kilometers', $lat, $lng)->where('lat', '!=', '')->where('lng', '!=', '')->whereIn('id', $user_ids)->get(); return count($users); } return 0; }