2014-09-11 134 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