Laravel雄辩的SQL查询与OR和AND与where子句

时间:2014-07-02 19:25:38

标签: php mysql laravel

我知道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();

我该怎么做?请指教。

2 个答案:

答案 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();