2014-09-11 73 views
3

我已在查询一个范围雄辩复杂的连接

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,或者Where。

但非所有可以采取功能作为输入,并且组查询......

别人的理想?

回答

4

Laravel不会让你建立这样的连接子句,所以你需要这个,使其工作:

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); 
    }); 
} 
+0

谢谢,这样做的工作) – 2014-09-11 13:27:46

-2

你可以考虑使用Doctrine ORM更强大,钻在一开始不容易..

+0

没有一个这个令人困惑的blabber单词实际上有助于回答OP的问题。 – aefxx 2016-08-06 13:32:05