Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有多个外键和透视表的Laravel关系_Php_Mysql_Database_Laravel_Eloquent - Fatal编程技术网

Php 具有多个外键和透视表的Laravel关系

Php 具有多个外键和透视表的Laravel关系,php,mysql,database,laravel,eloquent,Php,Mysql,Database,Laravel,Eloquent,我对laravel很陌生,我有四张表,员工、工作、应用工作和员工档案图片: 员工和乔布斯之间存在多对多关系 员工模式: class Employee extends Authenticatable { public function employeeProfilePhoto() { return $this->hasMany('App\Models\EmployeeProfilePhoto', 'employee_id'); } public

我对laravel很陌生,我有四张表,员工、工作、应用工作和员工档案图片:

员工和乔布斯之间存在多对多关系

员工模式:

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与jobs表中的某些id匹配。我想用拉威尔的口才。如何做到这一点

我建议以下答案

Employee::with(['employeeProfilePhoto', 'jobsApplied'])->get();

我不知道你有什么问题。

你可以尝试以下方法,让所有员工都有他们的个人资料照片,其中一名员工已经申请了一份工作,并且与
工作
表中的
雇主id
相匹配:

$employer_id = 'get the employer_id...';

$result = Employee::whereHas('jobsApplied', function($query) use ($employer_id) {
    $query->where('employer_id', $employer_id);
})->with('employeeProfilePhoto', 'jobsApplied')->get();

如果要按特定id进行筛选:

$employee = Employee::whereHas('jobsApplied', function ($query) use ($someId) {
    $query->where('employee_id', $someId);
})
->with('employeePhoto')
->get();
如果您只想要已申请工作的员工:

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

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

其中,在控制器中?你试过什么?在模型employee?@Erubiel$candidates=Job::with('appliedbyeemployees.employeeProfilePhoto')->where('jobs.employeer\u id',$currentEmployer->id)->get();我在controllerdo中尝试过这个,如果你想在单个查询中使用它,如果你要迭代候选对象,比如在foreach($candidate on$candidates)中,你可以访问像employeeProfilePhoto这样的候选关系,你的employeeProfilePhoto被定义为hasMany关系…这将带来更多的行,而不是给定的行,使其不明确。单个查询会更好,因为我还需要从employee和其他与employee有关系的表(如同一查询中的employee\u phone)中获取其他数据jobs表中的列是什么?为什么在调用get之前要调用load?通常在调用get之前,您会将
一起使用。load是您在获取模型后使用的工具。@t这是一个很好的观点,只需切换到
而不是
谢谢!我获取员工和个人资料照片我如何获取工作详细信息和透视表详细信息您也应该获取
已应用的工作
deails,请注意
和('jobsaplied')