Laravel 查询构建器与原始 ON 表达式连接
Laravel query builder join with raw ON expression
我正在尝试在 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 的查询生成器实现这一点?
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);
我正在尝试在 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 的查询生成器实现这一点?
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);