You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

原生SQL查询转Eloquent关联后续问题:模型预加载咨询

嘿,我注意到你已经给County和Freguesia模型搭好了关联关系,现在想把指定的原生SQL查询转换成对应的Eloquent关联写法对吧?不过你还没贴出具体要转换的原生SQL语句呢😉。先结合你现有的模型代码,我给你举几个常见场景的转换示例,帮你快速上手:

先梳理下你的现有关联
  • County模型:通过freguesias()方法和Freguesia建立了一对多关联(一个County对应多个Freguesia)
  • Freguesia模型:
    • 通过county()方法和County建立了反向从属关联(每个Freguesia属于一个County)
    • 通过weathers()方法和Weather建立了一对多关联(一个Freguesia对应多条Weather数据)
常见原生SQL转Eloquent示例

示例1:关联查询County及其下属Freguesia

假设你的原生SQL是这样的:

SELECT counties.*, freguesias.id AS freg_id, freguesias.name AS freg_name
FROM counties
LEFT JOIN freguesias ON counties.id = freguesias.id_county
WHERE counties.id = 5

对应的Eloquent写法可以用预加载(with)来实现:

// 简单预加载所有关联字段
$county = County::with('freguesias')->find(5);

// 或者只加载需要的字段,提升性能
$county = County::with(['freguesias' => function($query) {
    $query->select('id', 'id_county', 'name');
}])->find(5);

示例2:多层关联查询(County → Freguesia → Weather)

如果你的原生SQL涉及三层关联查询:

SELECT counties.name AS county_name, freguesias.name AS freg_name, weathers.temperature, weathers.recorded_at
FROM counties
JOIN freguesias ON counties.id = freguesias.id_county
JOIN weathers ON freguesias.id = weathers.id_freg
WHERE counties.id = 5 AND weathers.recorded_at >= '2024-01-01'

对应的Eloquent可以用嵌套预加载,还能在闭包里添加筛选条件:

$county = County::with(['freguesias' => function($fregQuery) {
    $fregQuery->select('id', 'id_county', 'name')
              ->with(['weathers' => function($weatherQuery) {
                  $weatherQuery->select('id', 'id_freg', 'temperature', 'recorded_at')
                               ->where('recorded_at', '>=', '2024-01-01');
              }]);
}])->find(5);
请补充具体原生SQL

你把需要转换的具体原生SQL贴出来,我就能帮你精准转换成适配你模型关联的Eloquent写法啦!

内容的提问来源于stack exchange,提问作者Hula Hula

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:07:27