【问题标题】:How to generate a USING clause in JOIN queries with Laravel's Query Builder?如何使用 Laravel 的 Query Builder 在 JOIN 查询中生成 USING 子句?
【发布时间】: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(...) 语句可以产生几乎相同的效果,但是我有重复的列,并且必须始终限定ab 中的列。也就是说,我必须写'a.x' 而不是'x',即使这并不重要,因为连接查询确保两者无论如何都是相等的。 USING 子句巧妙地解决了这个问题,只生成一个结果列x,知道只有这个值。

【问题讨论】:

  • 我猜如果你按照 Laravel 约定设置你的数据库表(主键总是命名为“id”),USING 不会有太大用处,因为它依赖于主键和外键同名。所以这对他们来说可能不是一个高优先级......

标签: php postgresql laravel join laravel-4


【解决方案1】:

所以,答案是 - 这是不可能的。

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

我的问题 - Laravel 5. Using the USING operator

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

【讨论】:

  • 我会更喜欢->joinUsing($table, $column);,但最终 TayTay 会选择 TayTay 并且不会允许任何不是他的马屁精核心圈子所做的事情。
猜你喜欢
  • 2019-10-31
  • 2021-08-19
  • 2021-08-27
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-02
  • 2022-01-18
相关资源
最近更新 更多