Laravel:在查询中使用Where和orWhere的正确方法
问题描述:
当前在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
?
答
见这个例子从the documentation:
DB::table('users')
->where('name', '=', 'John')
->orWhere(function($query)
{
$query->where('votes', '>', 100)
->where('title', '<>', 'Admin');
})
->get();
的封闭会告诉:AND,再OR条件。
答
阅读关于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评估,这就是为什么它会产生不同的结果