Laravel “拉雷维尔”;何处有;加上;以“为例;
我有一段感情: 员工:id |姓名 就业:id |员工id |公司id |开始日期|结束日期|终止类型|id 一名员工可以在一段时间内拥有多份工作。我需要根据employments中的最后/one行雇用员工,这就是我失败的原因。我在Employee.php模型中设置了以下内容: 在Employee.php模型中:Laravel “拉雷维尔”;何处有;加上;以“为例;,laravel,eloquent,Laravel,Eloquent,我有一段感情: 员工:id |姓名 就业:id |员工id |公司id |开始日期|结束日期|终止类型|id 一名员工可以在一段时间内拥有多份工作。我需要根据employments中的最后/one行雇用员工,这就是我失败的原因。我在Employee.php模型中设置了以下内容: 在Employee.php模型中: public function latestEmployment() { return $this->hasMany(Employment::class)->order
public function latestEmployment() {
return $this->hasMany(Employment::class)->orderBy('start_date', 'DESC')->take(1);
}
关于筛选:
$employees->where(function ($query) {
$query->whereHas('latestEmployment', function($subquery) {
$subquery->whereNull('termination_type_id');
}
});
在我看来,我需要一些急切的加载,因为->take(1)
不是这样工作的。这里whereHas考虑了整个表,不管我接下来写什么
谢谢你的帮助
编辑:
< P> >代码>第一个()/<代码>,代码> GET()/<代码>等。在中间执行查询,因此我不能使用它。重要的是,整个查询需要是一个构建器,因为我在最后需要一个
paginate()
。最简单的解决方案是获取所有员工,然后对他们进行筛选:
public function latesteemployment(){
返回$this->hasOne(Employment::class)->orderBy('start_date','DESC');
}
雇员::with('latesteemployment')->get()
->其中('latestEmployment.termination\u type\u id',null);
仅获取相关员工的查询:
Employee::选择('employees.*')
->加入('employments'、'employees.id'、'employments.employeer\u id')
->其中NULL('终止类型\ id')
->其中('start_date',函数($query){
$query->selectRaw('max(开始日期)'
->来自(‘雇员’)
->其中列('employee_id','employees.id');
})->get();
试试这样的方法
Employee::select('employees.*')->join('employments', function ($join) {
$join->on('employees.id', '=', 'employments.employee_id')
->whereNull('emails.termination_type_id');
})->distinct()->paginate(15);
使用
->first()
而不是->take(1)
@NullCod3take()
和limit()
如果检索到多个父模型,则函数将无法进行快速加载。@HH-我认为我不能只使用->first()。它不在“hasMany”中,我不能在Builder和whereHas中使用它。是的,这是我不想做的解决方案,先做get()然后过滤。特别是因为我在末尾有一个paginate(),它也可以在查询中完成,但这更复杂。你想要一个查询解决方案吗?如果你知道如何在查询的中间不做GET()、FiST()和PyInAuto(),那么,是的!我已经试了好几天了!重要的是,最后我可以在生成器上执行paginate()谢谢,但仍然不接受$join子句中的最后一行。