2014-05-09 50 views
7

在Laravel,我有兩個名爲預訂和客戶端的表。對於特定的預訂,我擁有與單個客戶端的關係。除了當我包含orWhere時,我查詢客戶預訂時一切正常。請看下面的代碼片段。或在哪裏不與Laravel雄辯的關係查詢

if($client_name!=null) 
     { 
      $client_name='%'.$client_name; 
      $bookings=$bookings->whereHas('client',function($q) use ($client_name){ 
       $q->where('first_name','LIKE',$client_name) 
        //->orWhere('last_name','LIKE',$client_name);     
      }); 
     } 

隨着註釋掉orWhere線,我得到與first_name客戶適當預訂由用戶指定。但是,當我使用或在查詢last_name時,顯示所有行,就好像last_name匹配每行。

它有什麼問題?請幫助。

+0

檢查以'DB :: getQueryLog()'運行的查詢爲例 –

+0

以下是最後一個輸出:select * from'throttle' where'user_id' =?限制1.我使用Sentry包進行身份驗證。上面的查詢在管理頁面中運行。 – sangam

+0

這不會告訴我們任何事情,請查看「客戶」表格。只需簡單地運行你粘貼的代碼並直接使用'dd(DB :: getQueryLog())'或者直接在CLI中使用手工修補程序 –

回答

9

的問題是,你現在這樣的代碼:

WHERE foreignKey = X AND first_name = Y OR last_name = Z 

所以,很顯然它不是什麼返回它應該。

現在,使其工作,你需要添加這些約束作爲一個子,其中:

$bookings=$bookings->whereHas('client',function($q) use ($client_name){ 
      $q->where(function ($q) use ($client_name) { 
       $q->where('first_name','LIKE',$client_name) 
        ->orWhere('last_name','LIKE',$client_name); 
      }); 
     }); 

這會導致類似的查詢:

WHERE foreignKey = X AND (first_name = Y OR last_name = Z) 

這是你所需要的。

+0

工作就像一個魅力!謝謝。 – sangam