【问题标题】:I want to display job with company that related to single postjob by category in laravel?我想在 laravel 中按类别显示与单个职位相关的公司的工作?
【发布时间】:2018-05-20 02:19:24
【问题描述】:

我在下面有三个表格: 我想在单个职位发布中按类别显示所有相关职位发布。我已经有一个职位发布页面,但在同一个职位页面中,我想在左侧显示相关职位。看我的照片!

控制器应该是什么,单作业页面(视图)应该是什么?请帮忙?

我的工作控制器

 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,
        ]);
    }

我的关系

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);
    }

工作表

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

公司表

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

分类表

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

【问题讨论】:

  • 您是否忘记了 Job 迁移中的 category_id 否则它将不起作用?那么外键约束呢?
  • 是的,我忘记包含了,我会编辑

标签: php laravel


【解决方案1】:

你可以像这样使用whereHas

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,
    ]);
}

在视图中你可以这样使用它:

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

对于评论中的问题,要查找拥有属于特定行业的公司的工作:

$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();

【讨论】:

  • 您好,Marabac,我还有一个问题。我有上面相同的表和其他表调用行业类型(id,名称),它们与公司表(id,comapnyName,..,industry_type_id)具有一对多的关系。单击行业类型_id 时,我想获取属于拥有自己行业类型的每个公司的所有工作。
  • 乐于助人 ;)
  • Maraboc,我还有其他问题。如何允许两个身份验证访问一条路由。我有两个身份验证“管理员”和“雇主”,我希望这两个身份验证可以访问一条路由,以便更新、创建、具有相同权限的工作。公共函数 __construct() { $this->middleware('auth:admin'); // $this->middleware('auth:employer');
  • 很抱歉这两天没来这里 :p
  • 这是一个simple solution 用于您的案例:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-04
  • 1970-01-01
相关资源
最近更新 更多