首页 > 解决方案 > 具有多个外键和数据透视表的 Laravel 关系

问题描述

我对laravel很陌生,我有四个表,employees、jobs、apply_jobs和employee_profile_picture: 在此处输入图像描述][1

Employee 和 Jobs 有多对多的关系

员工模型:

class Employee extends Authenticatable {

    public function employeeProfilePhoto() {
        return $this->hasMany('App\Models\EmployeeProfilePhoto', 'employee_id');
    }

    public function jobsApplied() {
        return $this->belongsToMany(Job::class, 'jobs_applieds', 'employee_id', 'job_id')
            ->withPivot('cover_letter', 'cv_path','created_at')
            ->orderBy('pivot_created_at','desc');
    }
}

工作模式:

class Job extends Model {

    public function appliedByEmployees() {
        return $this->belongsToMany(Employee::class, 'jobs_applieds', 'job_id', 'employee_id')
            ->withPivot('cover_letter', 'cv_path','employee_application_status');
    }

}

员工资料照片模型:

class EmployeeProfilePhoto extends Model {

    protected $table = 'employees_profile_photos';

    public function employeePhoto() {
        return $this->belongsTo(Employee::class, 'employee_id');
    }
}

我想获取所有已申请工作的员工及其个人资料图片,其中雇主 ID 与工作表中的某个 ID 匹配。我想用 laravel 雄辩。如何做到这一点

标签: phpmysqldatabaselaraveleloquent

解决方案


如果要按特定 id 过滤:

$employee = Employee::whereHas('jobsApplied', function ($query) use ($someId) {
    $query->where('employee_id', $someId);
})
->with('employeePhoto')
->get();

如果您只想要已申请工作的员工:

$employee = Employee::whereHas('jobsApplied')
    ->with('employeePhoto')
    ->get();

whereHas()它是一个雄辩的函数,可以在您的情况下检查关系是否存在,它将仅获取已申请工作的员工,或者您可以根据特定需求对条件进行子查询,例如员工 ID。


推荐阅读