我对laravel很陌生,我有四个表,employee,jobs,applied_jobs和employee_profile_picture:
员工与工作有很多关系
员工模型:
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');
}
}
我想获得所有申请了工作的雇员及其个人资料图片,其中loyal_id与工作表中的某些ID相匹配。我想雄辩地使用laravel。如何实现
答案 0 :(得分:1)
如果要按特定ID进行过滤:
''
如果您只希望申请工作的员工:
$employee = Employee::whereHas('jobsApplied', function ($query) use ($someId) {
$query->where('employee_id', $someId);
})
->with('employeePhoto')
->get();
whereHas()
它是一种雄辩的功能,可以根据您的情况检查关系是否存在,它将仅获取已申请工作的员工,或者您可以根据特定需求(例如employee id)对条件进行子查询。>
答案 1 :(得分:0)
我建议以下答案
for item in data:
print(item['moid_au'])
我不知道你是什么问题。
答案 2 :(得分:0)
您可以尝试执行以下操作,以获取所有雇员的个人资料照片,其中该雇员已被申请工作并与employer_id
表中的jobs
相匹配:
$employer_id = 'get the employer_id...';
$result = Employee::whareHas('jobsApplied', function($query) use ($employer_id) {
$query->where('employer_id', $employer_id);
})->with('employeeProfilePhoto', 'jobsApplied')->get();
答案 3 :(得分:-1)
我认为至少有三种方法可能适合您的方法。
从Job部门查询并使用with语句加载员工,以使其热切加载。通过使用.
,我们也可以急于加载嵌套的关系,例如所需的图像。这样,与此工作相关的员工将已经加载了他们的图像。您可以添加尽可能多的关系,以急切地加载到随附的数组中。
我从使用Job::where
的Job实例中实例化了一个空模型,因此不必查找主键的命名方式即可使用$model->getKeyName()
。
$model = new Job();
$query = $model->newQuery()->where($model->getKeyName(), $job_id);
$query->with(['appliedByEmployees.employeeProfilePhoto']);
if($result = $query->first()) {
$results = $result->appliedByEmployees;
echo dump($results);
}
或者使用引用从子查询中获取结果,即可获得所需的所有结果。当您已经有复杂的查询来找到所需的工作时,这特别有用。
请注意,我在函数参数括号后面使用了use
语句。这有助于将周围范围的值放入函数的范围,否则用于优化查询的函数将不知道$ job_id的值,并且会为未定义的变量引发错误。
$model = new Job();
$results = null;
$query = $model->newQuery()->where($model->getKeyName(),$job_id);
$query->with(['appliedByEmployees' =>function($query) use (&$results) {
$results = $query->with('employeeProfilePhoto')->get();
}]);
echo dump($results);
或者您可以从员工角度进行攻击。在这里,我通过$model->jobsApplied()
访问关系定义,其中包含一些有用的方法,例如getRelated()
,它将返回关系船中定义的模型的空实例。这使您可以在将来需要时“交换”作业的关系模型,并且您实际上不必担心主键字段的命名方式。
$model = new Employee();
$relation = $model->jobsApplied();
$related_model = $relation->getRelated();
$query = $model->newQuery()->whereHas('jobsApplied',function($query) use ($job_id, $related_model) {
$query->where($related_model->getKeyName(), $job_id);
});
$query->with('employeeProfilePhoto');
$results = $query->get();
echo dump($results);