Chomneau Men
Chomneau Men

Reputation: 51

I want to display job with company that related to single postjob by category in laravel?

I have three table below: I want to display all Related job post by category in Single jobpost. and I already have single job post page but in the same single job page I want to display related jobs in the left side. see my picture!

what is controller should be and in the Single job page (view) should be? please help?

Single job page

My jobController

 public function show($id, $company_id)
    {
        $singleJob = Job::find($id);
        $company = Company::find($company_id);
        $similarJob = Job::with('company')->where('category_id', $id)->get();
        return view('pages.single-job')->with([
            'singleJob'=> $singleJob,
            'company'=> $company,
            'similarJob' => $similarJob,
        ]);
    }

My relationship

job.php
public function company(){
    return $this->belongsTo(Company::class);
}

Job.php
public function category(){
return $this->belongsTo(Category::class);
}



//category.php
 public function job(){
        return $this->hasMany(Job::class);
    }


//company.php
    public function job(){
        return $this->hasMany(Job::class);
    }

Job table

    Schema::create('jobs', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('company_id');
        $table->string('jobTitle');
        $table->longText('jobDescription');

Company Table

Schema::create('company_types', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('admin_id');
            $table->string('name');
            $table->timestamps();
        });

Category table

 Schema::create('categories', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id');
            $table->string('name');
            $table->timestamps();
        });

Upvotes: 1

Views: 221

Answers (1)

Maraboc
Maraboc

Reputation: 11093

You can use whereHas like this :

public function show($id, $company_id)
{
    $singleJob = Job::find($id);
    $company = Company::find($company_id);
    $similarJobs = Job::with('company')
                       ->whereHas('category', function ($query) use($singleJob) {
                                $query->where('id', $singleJob->category->id);
                            })
                       ->get();
    return view('pages.single-job')->with([
        'singleJob'=> $singleJob,
        'company'=> $company,
        'similarJobs' => $similarJobs,
    ]);
}

And in the view you can use it like this :

@foreach ($similarJobs as $similarJob)
    // Add the job partial, componnent or just your HTML here for showing the Job
@endforeach

For the question in the comment, to find jobs that have a company that belongs to a given industry :

$some_industry_type_id = 1;
$jobsOfIndustryType = Job::whereHas('company', function ($query) use($some_industry_type_id) {
                                    $query->where('industry_type_id', $some_industry_type_id);
                                })
                           ->get();

Upvotes: 1

Related Questions