这是来自this one的后续问题。
县模式:
...
public function freguesias() {
return $this->hasMany(\App\Freguesia::class, 'id_county');
}
...
现在基本上我的Freguesia模型了:
...
public function county() {
return $this->belongsTo(\App\County::class, 'id_county');
}
public function weathers() {
return $this->hasMany(\App\Weather::class, 'id_freg');
}
...
我渴望从县加载这种关系,例如:
$item = County::with(['freguesias' => function($q) {
$q->with(['weathers']);
}])->select(['id'])->findOrfail(request()->id);
我的主要问题是我必须收集(天气表中最后插入的行id_freg = X
)当前天气为属于特定Freguesia
的每个County
。 where weathers.id_freg IN (X, Y, Z) ordered by id DESC
我的天气表看起来像:
+--------+-------+---------+
| id | temp | id_freg |
+--------+-------+---------+
| 337 | 12.36 | 1 |
| 3556 | 11.46 | 2 |
| 6775 | 9.30 | 3 |
| 10210 | 8.55 | 1 |
| 13429 | 9.69 | 2 |
我have already正确的SQL:
select w.*
from weathers w
where w.id_freg in (X, Y, ...) and
w.id = (select max(w2.id)
from weathers w2
where w2.id_freg = w.id_freg
);
但是如何在急切的加载中实现这一点呢?或者是否还有通过县模型的其他方式?
答案 0 :(得分:1)
最简单的解决方案是使用有序的session.defaultSession.webRequest.onBeforeRequest
关系:
HasOne
这可以正常工作,但在用于预先加载的时候会为freguesias提取所有天气。
使用您的查询的改进版本:
public function weather() {
return $this->hasOne(\App\Weather::class, 'id_freg')->orderByDesc('id');
}