【发布时间】:2014-12-02 09:18:03
【问题描述】:
我在 Laravel 4.2 中有这样的 Eloquent 语句
$user_message_block = Message::where('responder_id', '=', Auth::user()->id)
->where('user_id', '=', $user->id)->first();
如果$user_message_block 不存在,我还必须检查反向情况,我会这样做......
if(!$user_message_block){
$user_message_block = Message::where('responder_id', '=', Auth::user()->id)
->where('user_id', '=', $user->id)->first();
}
我真正想做的是运行一个查询来同时检查这两种情况..
在伪表达式中我需要这样的东西:
$user_message_block = Message::where('responder_id', '=', Auth::user()->id,
'AND', 'user_id', '=', $user->id,
'OR', 'responder_id', '=', $user->id,
'AND', 'user_id', '=', Auth::user()->id)->first();
所以基本上我需要
SELECT Message where (responder_id=x AND user_id=y) OR where (responder_id=y AND user_id=x)
我如何使用 Eloquent 做到这一点。我找不到更多关于 Eloquent 使用的 OR 和 AND 语句的信息。
谢谢!
更新:
经过更多查看,我发现这似乎有效(仍在测试很多)
$user_message_block =
Message::where(['responder_id' => Auth::user()->id, 'user_id' => $user->id])
->orWhere(['user_id' => Auth::user()->id, 'responder_id' => $user->id])
->first();
或
$user_message_block =
Message::where(['responder_id' => Auth::user()->id, 'user_id' => $user->id])
->orWhere(['user_id' => Auth::user()->id, 'responder_id' => $user->id])
->get();
我需要考虑这方面的任何缺点吗?
【问题讨论】: