雄辩的复杂联合

时间:2014-09-11 13:01:01

标签: laravel eloquent

我制作了一个范围

public function scopeCollaborative($query){
    return $query->leftJoin('collaborative', function($join){
        $join->on('imms.phone2', '=', 'collaborative.phone')
            ->orOn('imms.phone', '=', 'collaborative.phone')
            ->where('collaborative.user_id', '=', App('CURUSER')->id);
    });
}

在查询日志中,此范围添加:

left join `cs_collaborative` on 
    `cs_imms`.`phone2` = `cs_collaborative`.`phone` or 
    `cs_imms`.`phone` = `cs_collaborative`.`phone` and 
    `cs_collaborative`.`user_id` = 3

但我需要:

left join `cs_collaborative` on 
    (`cs_imms`.`phone2` = `cs_collaborative`.`phone` or 
    `cs_imms`.`phone` = `cs_collaborative`.`phone`) and 
    `cs_collaborative`.`user_id` = 3

我没有找到一个好的解决方案,JoinClause有以下功能:On,orOn,where,orWhere。

但不是全部可以作为输入和分组查询...

有人有理想吗?

2 个答案:

答案 0 :(得分:6)

Laravel不允许你构建这样的join子句,所以你需要这个才能使它工作:

public function scopeCollaborative($query){
    return $query->leftJoin('collaborative', function($join){
        $join->on('imms.phone2', '=', 'collaborative.phone')
            ->where('collaborative.user_id', '=', App('CURUSER')->id)
            ->orOn('imms.phone', '=', 'collaborative.phone')
            ->where('collaborative.user_id', '=', App('CURUSER')->id);
    });
}

答案 1 :(得分:-4)

你可以考虑使用Doctrine ORM更强大,但在开始时不那么容易......