I have a project of human resource management where I want to display the ratings and non ratings jobseekers while searching as a employer.
I have tried this but this only gives jobseekers whose ratings has been set.
public function search(Request $request)
{
$query = $request->get('query');
if (isset($query)) {
$queryParam = explode(' ', $query);
} else {
$queryParam = null;
}
$jobseekers = JobSeekers::where(function ($que) use ($queryParam) {
if (isset($queryParam)) {
foreach ($queryParam as $queries) {
$que->orWhere('job_seekers.category', 'like', '%' . $queries . '%');
$que->orWhere('job_seekers.keywords', 'like', '%' . $queries . '%');
$que->orWhere('job_seekers.experience', 'like', '%' . $queries . '%');
}
}
})->join('ratings', 'job_seekers.id', '=', 'ratings.js_id')
->groupBy('job_seekers.id')
->select('job_seekers.id', DB::raw('AVG( ratings.rating ) AS average_rating'))
->orderBy('average_rating', 'desc')
->get();
return view('search.search_all', compact('jobseekers'));
}
I have a rating table .
Schema::create('ratings', function (Blueprint $table) {
$table->increments('id');
$table->integer('emp_id')->unsigned();
$table->integer('js_id')->unsigned();
$table->integer('rating')->unsigned();
$table->longText('description')->nullable();
$table->foreign('emp_id')->references('id')->on('employers');
$table->foreign('js_id')->references('id')->on('job_seekers');
$table->timestamps();
});
I get data of only objects whose ratings is given but not for the datas that exists but has no rating.
Попробуйте leftJoin()
вместо join()
.
JOIN
выбирает только результаты, имеющие данные в объединенной таблице.
LEFT JOIN
выбирает все результаты и прикрепляет данные из объединенной таблицы.
public function search(Request $request)
{
$jobseekers = JobSeekers
::when($request->get('query'), function($query) use ($request) {
$words = explode(' ', $request->get('query'));
foreach($words as $word){
$query->orWhere('job_seekers.category', 'like', '%' . $word . '%');
$query->orWhere('job_seekers.keywords', 'like', '%' . $word . '%');
$query->orWhere('job_seekers.experience', 'like', '%' . $word . '%');
}
})
->leftJoin('ratings', 'job_seekers.id', '=', 'ratings.js_id')
->groupBy('job_seekers.id')
->select('job_seekers.id', DB::raw('AVG( ratings.rating ) AS average_rating'))
->orderBy('average_rating', 'desc')
->get();
return view('search.search_all', compact('jobseekers'));
}
@ROSHNI у вас есть отношения?
да Schema::create('job_seekers', function (Blueprint $table) { $table->increments('id'); $table->integer('user_id')->unsigned(); }); и у пользователя есть электронная почта, имя, фамилия;
спасибо :) у меня есть таблица обобщения, т.е. пользователь - это одна таблица, а соискатель и работодатель - другая таблица. Итак, как я могу получить данные пользователя этого js_id.