2014-10-28 178 views
0

當前在Laravel中運行查詢,但預期的輸出不正確。所以,看來我仍然不知道使用where/orwhere的正確方法。我在下面有兩個查詢;Laravel:在查詢中使用Where和orWhere的正確方法

QUERY圖1(a)

//total friends 
    $user = Friend::select('friend_sender', 'friend_receiver') 
       ->where('friend_sender', Input::get("user_id")) 
       ->orwhere('friend_receiver', Input::get("user_id")) 
       ->where('friendship_status','friends')->count(); 

QUERY圖1(b)

//total friends 
    $user = Friend::select('friend_sender', 'friend_receiver') 
        ->where('friendship_status','friends') 
        ->where('friend_sender', Input::get("user_id")) 
        ->orwhere('friend_receiver', Input::get("user_id"))->count(); 

這兩個查詢產生不同的結果。 QUERY 1 (a)結果是0,這在我自己的例子中是正確的,QUERY 1 (b)結果是1這是錯誤的。

現在,我認爲其他WHEREs應該在WHERE/orWHERE陳述之後。我寫了另一個查詢,但沒有得到所需的結果。

$user = Friend::select('friend_sender', 'friend_receiver') 
       ->where('friend_sender',Input::get("user_id")) 
       ->orwhere('friend_receiver',Input::get("user_id")) 
       ->where('sender_follow', 'yes') 
       ->orwhere('receiver_follow', 'yes') 
       ->where('friendship_status', 'friends')->count(); 

我的問題是,我該如何正確使用WHERE/orWHERE

回答

1

見這個例子從the documentation

DB::table('users') 
     ->where('name', '=', 'John') 
     ->orWhere(function($query) 
     { 
      $query->where('votes', '>', 100) 
        ->where('title', '<>', 'Admin'); 
     }) 
     ->get(); 

的封閉會告訴:AND,再OR條件。

1

閱讀關於MySQL的運算符優先級:http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html

在您例如,第一個查詢是相同的東西,如:

select 
    columns 
from 
    table 
where 
    column1 = value1 
or 
    (column2 = value2 and column3 = value3) 

而其他查詢是相同的東西,如:

select 
    columns 
from 
    table 
where 
    (column3 = value3 and column1 = value1) 
or 
    column2 = value2 

'AND'首先被sql評估,這就是爲什麼它會產生不同的結果