2014-10-28 182 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评估,这就是为什么它会产生不同的结果