我知道sql AND可以通过连续的where子句来实现。和OR在哪里(条件,' OR')。 我想从消息表中选择所有消息,其中sentTo = editor_id AND sentFrom = currentUser_id OR其中sentTo = currentUser_id AND sentFrom = editor_id。 我有这个查询,我试图通过,
$this->data['messages'] = Message::where(function ($query) use($uId) {
$query->where('sentTo', '=', $this->data['currentUser']->id)
->orWhere('sentFrom', '=', $uId);
})
->where(function ($query) use($uId){
$query->where('sentTo', '=', $uId)
->orWhere('sentFrom', '=', $this->data['currentUser']->id);
})
->get();
我该怎么做?请指教。
答案 0 :(得分:4)
我有点困惑,因为你没有提供括号来知道你想要的运算符优先级。
假设你想要WHERE (editor_id=$editorId AND sentFrom=$currentUserId) OR (sentTo=$currentUserId AND sentFrom=$editorId)
,那么Laravel的最新版本允许你这样做:
Message::where(['editor_id' => $editorId, 'sentFrom' => $currentUserId])
->orWhere(['sentTo' => $currentUserId, 'sentFrom' => $editorId])->get();
无需使用闭包。
答案 1 :(得分:0)
试试这个
$this->data['messages'] = Message::where(function ($query) use($uId) {
$query->where('sentTo', '=', $this->data['currentUser']->id)
->where('sentFrom', '=', $uId);
})-> orWhere(function ($query) use($uId){
$query->where('sentTo', '=', $uId)
->Where('sentFrom', '=', $this->data['currentUser']->id);
})->get();