【问题标题】:Build a left join query with using() instead of on()使用 using() 而不是 on() 构建左连接查询
【发布时间】:2015-12-31 16:37:31
【问题描述】:

如何创建与using() 而非on 连接的查询?

我有这个:

$games = DB::table('games')
    ->leftJoin('game_info', 'game_id')
    ->get();

我希望它构建一个如下所示的查询:

select * from games left join game_info using(game_id);

【问题讨论】:

  • 可以试试DB::table("games")->select(DB::raw("SELECT * FROM games LEFT JOIN game_info USING(game_id)"))->get();,看看是否可行。

标签: php laravel join eloquent query-builder


【解决方案1】:

如果您不想创建原始查询,似乎没有简单的方法可以通过这种方式进行连接。但是查看 SQL 文档并快速查看此 thread using 与您在两个表的同一列中定义的工作方式相同,因此查询:

select * from games left join game_info using(game_id);

将与

一样工作
select * from games left join game_info ON games.game_id = game_info.game_id

所以你可以简单地使用:

$games = DB::table('games')
    ->leftJoin('game_info', 'games.game_id','=','game_info.game_id')
    ->get();

【讨论】:

  • 表示我缺少 leftJoin 的参数 2
  • 是的,对不起,我的错误,删除这个
  • 它的工作原理是一样的,是的,但它不会返回相同的结果。使用 on 您将从两个表中获得两个 game_id 列。使用using,您将把两列合并为一列。
  • 是的,但是当您不指定列时(并且您没有在示例代码中这样做),实际上您将只有一次可用的game_id 所以它不会让您任何区别
  • @GetOffMyLawn 还有一件事 - 似乎 USING 在 SQL 中不是标准的,并且并非在所有引擎中都可用,所以可能这就是为什么没有构建器方法来创建它的原因
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 2017-07-11
相关资源
最近更新 更多