我对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匹配的一些id在工作表。我想用拉威尔雄辩。如何做到这一点
4条答案
按热度按时间inb24sb21#
我建议以下答案
我不知道你有什么问题。
x8diyxa72#
您可以尝试以下方法来获取所有员工的个人资料照片,其中有一名员工申请了一份工作,并与
employer_id
在jobs
表格:dvtswwa33#
如果要按特定id筛选:
如果您只想要已申请工作的员工:
dgenwo3n4#
至少有三种方法适合你的方法。
从job pespective查询并使用with语句加载员工以使其急切地加载。通过使用
.
我们还可以急切地加载嵌套关系,比如您需要的图像。这样,与此工作相关的员工将加载他们的图像。可以在提供给的数组中添加任意多的关系以急切地加载。我示例化了一个使用
Job::where
因此,不必查找主键是如何命名的$model->getKeyName()
可以使用。或者使用引用从子查询中获取结果,您就得到了所需的所有结果。当您已经有一个复杂的查询来获取所需的作业时,这一点特别有用。
请注意,我使用
use
函数参数括号后的语句。这有助于将周围作用域中的值放入函数的作用域,否则用于优化查询的函数将不知道$job\u id的值,并对未定义的变量抛出错误。或者你可以从员工的Angular 来攻击。在这里,我通过
$model->jobsApplied()
其中包含一些有用的方法,如getRelated()
它将返回关系中定义的模型的空示例。这使您能够在将来需要时“交换”作业的关系模型,并且您不必真正担心主键字段的命名方式。