【问题标题】:Laravel 查询构建器分组
【发布时间】:2017-01-09 20:52:16
【问题描述】:

我在进行 laravel 查询时遇到问题:

我想要例如:

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

我有这个但不工作:

$user = Auth::user(); $id_user = $user->id; $message = DB::table('消息') ->where('sender_id', '=', $user->id) ->where('reciver_id', '=', $id) ->orWhere(function($query) 使用 ($id,$id_user){ $query-->where('sender_id', '=', $id) ->where('reciver_id', '=', $id_user); }) ->join('用户', 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(); 返回$消息;

【问题讨论】:

  • 什么究竟不起作用?
  • 您能否详细说明您的代码“不起作用”的原因?你期待什么,实际发生了什么?如果您遇到异常/错误,请发布它发生的行和异常/错误详细信息。请edit这些详细信息,否则我们可能无法提供帮助。

标签: mysql laravel laravel-5 eloquent


【解决方案1】:

您应该将前两个 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();

【讨论】:

    猜你喜欢
    • 2016-03-30
    • 2021-09-25
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    相关资源
    最近更新 更多