Отображение информации 1 таблицы из 2 столбцов в результатах поиска.(PHP - Laravel) - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть веб-страница, которая позволяет вам просматривать различные предложения о работе, они сохраняются в таблице MySQL под названием «вакансии»

«вакансии» имеет разныестолбцы, один из которых «базовый» для обычных рабочих мест и «op2» для премиальных рабочих мест.

При выполнении поиска я пытаюсь отобразить обе эти категории в своих результатах, однако мне удалось отобразить только одну, а не обе.

Мне удалось отобразить обе этизадания с использованием:


 $premium_jobs = Posts::where('title', 'like', '%' . $request->q . '%')->where('type', 'op2')->where('status', 'active')->orderBy('id', 'desc')->take(3)->get();

Однако при использовании фильтров для поиска определенных слов он работает с базовыми заданиями, но отображает все премиальные задания без применения какого-либо фильтра.


Некоторые запросы, которые не работали:

  • Поиск основных заданий, но всегда отображает все задания премиум-класса, независимо от того,что это был за поиск:

    $premium_jobs = Posts::where('title', 'like', '%' . $request->q . '%')->where('type', 'op2')->where('status', 'active')->orderBy('id', 'desc')->take(3)->get();
    

    Пример

  • Не отображает премиальные вакансии, отображаются только основные вакансии:

    $premium_jobs = Posts::where('title', 'like', '%' . $request->q . '%')->where('type', 'op2')->where('type', 'basic')->where('status', 'active')->orderBy('id', 'desc')->take(3)->get();
    

    Пример

  • Не отображает базовые задания, отображаются только премиальные задания:

    $premium_jobs = $jobs->where('type', 'op2')->where('status', 'active')->paginate(15);
    

    Пример

  • Отображение премиальных заданий и базовых заданий, а также дубликат базовых заданий в виде премиум-заданий:

    $premium_jobs = $jobs->where('status', 'active')->paginate(15);
    

    Пример


Контроллер:

<?php  

class SearchController extends Controller
{

    public function index(Request $request){

        $jobs = new Posts();
        if ($request->has('q')) {
            $jobs = $jobs->where('title', 'like', '%' . $request->q . '%');
        }

        if (!empty($request->city)) {
            $city = Cities::where('name', $request->city)->first();
            $jobs = $jobs->where('city_id', $city->id);
        }

        if (!empty($request->min_salary)) {
            $jobs = $jobs->where('salary', '>', $request->min_salary);
        }

        if (!empty($request->jt)) {
            $job_type = JobTypes::where('name', $request->jt)->first();
            $jobs = $jobs->where('job_type_id', $job_type->id);
        }

        if (!empty($request->ex)) {
            $jobs = $jobs->where('experience', $request->ex);
        }

        if (!empty($request->cat)) {
            $category = Categories::where('name', $request->cat)->first();
            $jobs = $jobs->where('cat_id', $category->id);
        }


// PREMIUM JOBS

       $premium_jobs = $jobs->where('status', 'active')->paginate(15);


// BASIC JOBS

        $basic_jobs = $jobs->where('type', 'basic')->where('status', 'active')->paginate(15);

        $cities = Cities::all();
        $job_types =  JobTypes::all();
        $categories =  Categories::all();

        return view('search.index', compact('basic_jobs', 'premium_jobs', 'request', 'cities', 'job_types', 'categories'));
    }

    ?>

Любое понимание будет с благодарностью!

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019
<?php 

// To get both the jobs : 

$allJobs = $jobs->where('status', 'active')->paginate(15);

// To get al basic jobs 

$allBasicJobs = $jobs->where('status', 'active')->where('type', 'basic')->paginate(15);

// To get all premium jobs 

$allBasicJobs = $jobs->where('status', 'active')->where('type', 'op2')->paginate(15);

// To search title in  basic jobs but get all premier jobs

$filteredBasicJobsAllPremiumJobs = $jobs->where('status', 'active')
                                        ->where('type', 'op2')
                                        ->orWhere(function($q) use($request){
                                            return $q->where('type', 'basic')
                                                ->where('title', 'like', '%' . $request->q . '%');
                                        })
                                        ->paginate(15);

// To search title in  permium jobs but get all basic jobs

$filteredPremiumJobsAllBasicJobs = $jobs->where('status', 'active')
                                        ->where('type', 'basic')
                                        ->orWhere(function($q) use($request){
                                            return $q->where('type', 'op2')
                                                ->where('title', 'like', '%' . $request->q . '%');
                                        })
                                        ->paginate(15);

// To search title in both basic and premium jobs

$filteredJobs = $jobs->where('status', 'active')
                    ->where('title', 'like', '%' . $request->q . '%')
                    ->paginate(15);
0 голосов
/ 16 февраля 2019

У вас есть другие виды работ?Если нет, попробуйте это

Posts::where('title', 'like', '%' . $request->q . '%')->where('status', 'active')->orderBy('id', 'desc')->take(3)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...