首页 文章

Laravel查询构建器分组

提问于
浏览
0

我在制作laravel查询时遇到问题:

我想要例如:

SELECT * FROM USERS WHERE (a = b) or (b = a)

我有这个,但没有工作:

$user = Auth::user();
    $id_user = $user->id;
    $message = DB::table('message')
    ->where('sender_id', '=', $user->id)
    ->where('reciver_id', '=', $id)
    ->orWhere(function($query) use ($id,$id_user){
      $query-->where('sender_id', '=', $id)
       ->where('reciver_id', '=', $id_user);
    })
    ->join('users', function ($join) {
       $join->on('users.id', '=', 'message.sender_id')->orWhere('users.id', '=', 'message.reciver_id');
    })->select('users.*', 'message.topic', 'message.message', 'message.read', 'message.created_at as date')
    ->orderBy('date')->get();

    return $message;

1 回答

  • 1

    您应该将前两个嵌套在一个新的中 . 请参阅以下代码:

    $message = DB::table('message')
            ->where(function($query) use ($id,$id_user){
                $query->where('sender_id', '=', $id_user)
                    ->where('reciver_id', '=', $id);
            })
            ->orWhere(function($query) use ($id,$id_user){
                $query->where('sender_id', '=', $id)
                    ->where('reciver_id', '=', $id_user);
            })
            ->join('users', function ($join) {
                $join->on('users.id', '=', 'message.sender_id')->orWhere('users.id', '=', 'message.reciver_id');
            })->select('users.*', 'message.topic', 'message.message', 'message.read', 'message.created_at as date')
            ->orderBy('date')->get();
    

相关问题