我正在尝试在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的查询构建器实现这一目标?
答案 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);