mysql - Laravel 查询生成器分组

标签 mysql laravel laravel-5 eloquent

我在 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;

最佳答案

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

    $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();

关于mysql - Laravel 查询生成器分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39280535/

相关文章:

mysql - 如何动态地将行值显示为列

php - MySQL 错误 - 无效的日期时间格式 : 1292 Incorrect datetime value: '' for column

javascript - 在每个 foreach 上显示倒计时器

php - 在 Laravel 中将旧表迁移到新表

javascript - Blade 上的 Laravel 自定义 javascript 不起作用

php - 图片标签只在首页返回用户头像,其他页面不返回

php - Laravel 从 mysql 获取标签

MySQL选择最后两个插入的ID

javascript - 将 JS var 存储到数据库中

ajax - 如何从 Laravel 中的函数传递 View 和 json?