【发布时间】:2018-09-18 20:33:55
【问题描述】:
我正在谈恋爱:
员工:id |名字
工作:id |员工编号 | company_id |开始日期 |结束日期 |终止类型ID
随着时间的推移,一名员工可以从事多项工作。我需要根据就业中的最后/一个行找到受雇的员工,这就是我失败的地方。我已经在我的模型 Employee.php 中设置了这个:
在Employee.php 模型中:
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 考虑到整个表,不管我接下来写什么。
感谢您的帮助。
编辑:
执行first()、get() 等会在中间执行查询,所以我不能使用它。重要的是整个查询需要是一个 Builder,因为最后我需要一个 paginate()。
【问题讨论】:
-
使用
->first()而不是->take(1) -
如果您检索多个父模型,@NullCod3
take()和limit()函数将不适用于预加载。 -
@HH - 我认为我不能只使用 ->first()。它不在“hasMany”中,我不能在 Builder 中使用它,然后在 whereHas 中使用它。