[英]How to generate a USING clause in JOIN queries with Laravel's Query Builder?
PostgreSQL 支持 JOIN 语句中的USING子句,我想用它来简化我的查询。 例如:
select * from a join b using (x, y, z) where ... order by x;
如何使用 Laravel 的查询生成器或 Eloquent 来表达这一点?
DB::table('a')
->select('*')
->join('b', function($join))
->where(...)
->orderBy('x');
请注意,这个问题与https://stackoverflow.com/questions/31465918/how-to-generate-a-natural-join-query-with-laravels-query-builder不同,我问的是 NATURAL JOIN,而不是 JOIN使用。
另外,我知道我可以使用多个$join->on(...)
语句产生几乎相同的效果,但是我有重复的列,并且必须始终限定a
和b
中的列。 也就是说,我必须写'a.x'
而不是'x'
即使这并不重要,因为连接查询确保两者无论如何都是相等的。 USING 子句巧妙地解决了这个问题,只生成一个结果列x
,知道只有这个值。
因此,答案是-这是不可能的。
我在Laravel 5上继续了这个问题,但这仍然是不可能的。
Laravel 中没有什么是不可能的。
Until support for join using
is added to Laravel core, you can add support for it by installing this Laravel package: https://github.com/nihilsen/laravel-join-using .
它是这样工作的:
use Illuminate\Support\Facades\DB;
use Nihilsen\LaravelJoinUsing\JoinUsingClause;
DB::table('users')->leftJoin(
'clients',
fn (JoinUsingClause $join) => $join->using('email', 'name')
);
// select * from `users` left join `clients` using (`email`, `name`)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.