原生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
相关产品推荐
相关产品推荐

