繁体   English   中英

如何使用 Laravel 的 Query Builder 在 JOIN 查询中生成 USING 子句?

[英]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(...)语句产生几乎相同的效果,但是我有重复的列,并且必须始终限定ab中的列。 也就是说,我必须写'a.x'而不是'x'即使这并不重要,因为连接查询确保两者无论如何都是相等的。 USING 子句巧妙地解决了这个问题,只生成一个结果列x ,知道只有这个值。

因此,答案是-这是不可能的。

我在Laravel 5上继续了这个问题,但这仍然是不可能的。

我的问题-Laravel 5.使用USING运算符

我的拉取请求-https://github.com/laravel/framework/pull/12773

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM