php - 具有多个外键和数据透视表的 Laravel 关系
问题描述
我对laravel很陌生,我有四个表,employees、jobs、apply_jobs和employee_profile_picture:
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 雄辩。如何做到这一点
解决方案
如果要按特定 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。
推荐阅读
- java - 在多个事务中使用 JDBC 读取 PostgreSQL BLOB:“错误:无效的大对象描述符:0”
- python-3.x - LDAP3 Socket 连接仅适用于 conda 环境
- windows - 批处理 - 特定文件夹的文件大小(以 GB 为单位)的脚本
- django - *_set 来自不同应用程序的模型的属性
- apache-spark - 如何使用结构化流优化 Kafka 主题的分区策略以供消费?
- mqtt - 错误:AWS_ERROR_MQTT_UNEXPECTED_HANGUP(无限连接中断/连接恢复循环)
- c# - 在 C# 中调用标量函数
- c++ - 我应该导出 dll 使用的静态库的成员吗
- c# - “获取一个地方的开放和关闭时间,如果 DateTime.Now 介于标记为开放之间”在本地工作,但在发布后不在服务器上
- reactjs - React Devexpress图表不显示数据