【发布时间】:2015-10-06 14:17:24
【问题描述】:
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 USING。
另外,我知道多个$join->on(...) 语句可以产生几乎相同的效果,但是我有重复的列,并且必须始终限定a 和b 中的列。也就是说,我必须写'a.x' 而不是'x',即使这并不重要,因为连接查询确保两者无论如何都是相等的。 USING 子句巧妙地解决了这个问题,只生成一个结果列x,知道只有这个值。
【问题讨论】:
-
我猜如果你按照 Laravel 约定设置你的数据库表(主键总是命名为“id”),USING 不会有太大用处,因为它依赖于主键和外键同名。所以这对他们来说可能不是一个高优先级......
标签: php postgresql laravel join laravel-4