Laravel查询构建器与原始ON表达式连接

时间:2018-03-04 21:01:18

标签: sql laravel laravel-5.5

我正在尝试在Laravel 5.5查询构建器中实现类似以下简化示例:

SELECT *
FROM t
INNER JOIN access
  ON (t.field1 = access.field1 OR t.field2 = access.field2)
     AND access.user_id = :user_id

请注意,ON在多个字段上有复合表达式,并且还使用参数。

我真的很难让ON声明工作。我已经尝试了join()DB:raw()我能想到的所有组合。

如何使用Laravel的查询构建器实现这一目标?

1 个答案:

答案 0 :(得分:5)

DB::table('t')->join('access', function($query) use($user_id) {
    $query->where(function($query) {
        $query->on('t.field1', '=', 'access.field1')
            ->orOn('t.field2', '=', 'access.path_field2');
    })->where('access.user_id', '=', $user_id);
});

->where('access.user_id', '=', $user_id)条件不必在JOIN闭包内。我只是把它放在那里以完全匹配您的查询。将其放在外面简化了代码:

DB::table('t')->join('access', function($query) {
    $query->on('t.field1', '=', 'access.field1')
        ->orOn('t.field2', '=', 'access.path_field2');
})->where('access.user_id', '=', $user_id);