Laravel:在查询中使用Where和orWhere的正确方法

时间:2014-10-28 11:59:48

标签: laravel-4

目前在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

2 个答案:

答案 0 :(得分:1)

请参阅the documentation中的此示例:

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

闭包将告诉:首先是AND,然后是OR条件。

答案 1 :(得分: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

&#39; AND&#39;将首先由sql评估,这就是为什么它产生不同的结果