我有根据输入参数连接表的条件代码
$content = Content::select('content.*');
if (isset($filters['ruleNumber'])) {
$content->join('violation', 'violation.content_id', '=', 'content.id')
->where('violation.rule_number', $filters['ruleNumber']);
}
if (isset($filters['unprocessed'])) {
$content->join('violation', 'violation.content_id', '=', 'content.id')
->where('violation.status', 'pending');
}
如果$ filters [' ruleNumber']和$ filters ['未处理的']都到期,则会导致重复的联接查询(即"违规&#34 ;加入两次)。我可以在调用join()之前跟踪我的连接,但是我需要在使用查询构建器的任何地方实现此逻辑。
框架似乎并不支持开箱即用,或者我错过了什么?
答案 0 :(得分:2)
$content = Content::select('content.*');
if (isset($filters['ruleNumber']) || isset($filters['unprocessed'])){
$content->join('violation', 'violation.content_id', '=', 'content.id')
}
if (isset($filters['ruleNumber'])) {
$content->where('violation.rule_number', $filters['ruleNumber']);
}
if (isset($filters['unprocessed'])) {
$content->where('violation.status', 'pending');
}