如何解决来自本地范围的雄辩的多次联接
有一个关于口才和范围功能的问题:
假定两个范围:
class Result extends Model {
public function scopeIsRace($query) {
return $query
->join('sessions','sessions.id','=','results.session_id')
->where('sessions.type',10)
}
public function scopeIsOfficial($query) {
return $query
->join('sessions','results.session_id')
->join('events','events.id','sessions.event_id')
->where('events.regular_event',1);
}
}
同时调用这两个函数会执行两次会话连接,结果查询看起来像这样(无效)
select * from `results` inner join `sessions` on `sessions`.`id` = `results`.`session_id` inner join `sessions` on `sessions`.`id` = `results`.`session_id` inner join `events` on `events`.`id` = `sessions`.`event_id` where `driver_id` = 24 and (`sessions`.`type` = 10 or `sessions`.`type` = 11) and `events`.`regular_event` = 1
如何防止会话中的双重加入?
解决方法
非常感谢@Nima。完全忘记了高级功能所在的位置。使用了建议的question中的结构,效果很好:
public function scopeIsRace($query) {
return $query->whereHas('session',function($query){
$query->where('type',10);
});
}
public function scopeIsOfficial($query) {
return $query->whereHas('session',function($query) {
return $query->whereHas('event',function($query2) {
$query2->where('regular_event',1);
});
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。