Php 拉威尔5。使用Using操作符

Php 拉威尔5。使用Using操作符,php,laravel,join,using,Php,Laravel,Join,Using,我花了很长时间试图找到它,但我不敢相信Laravel没有这个功能 因此,我可以写: select * from a join b where a.id = b.id 或者更漂亮: select * from a join b using(id) 第一种情况对Laravel来说很简单: $query->leftJoin('b', 'a.id', '=', 'b.id') 但是如何写第二个案例呢?我希望它应该简单而简短,比如: $query->joinUsing('b', 'id'

我花了很长时间试图找到它,但我不敢相信Laravel没有这个功能

因此,我可以写:

select * from a join b where a.id = b.id
或者更漂亮:

select * from a join b using(id)
第一种情况对Laravel来说很简单:

$query->leftJoin('b', 'a.id', '=', 'b.id')
但是如何写第二个案例呢?我希望它应该简单而简短,比如:

$query->joinUsing('b', 'id')
但是没有这样的方法,我也找不到

PS:答案可能很简单,只是用词很难找到,因为它无处不在

更新

我将更深入地研究源代码,尝试创建作用域或传递一个函数来加入,但即使在这个函数内部,我也无法使用这个$query来实现任何功能。例如:

public function scopeJoinUsing($query, $table, $field) {
    sql($query->join(\DB::raw("USING(`{$field}`)")));
    // return 
    // inner join `b` on USING(`id`)  ``
    // yes, with "on" and with empty quotes
    sql($query->addSelect(\DB::raw("USING(`{$field}`)")));
    // return 
    // inner join `b` USING(`id`) 
    // but in fields place, before "FROM", which is very logic :)
}

所以,即使忘记范围,我也不能在DB::raw中这样做,所以这是不可能的。。。我第一次在拉威尔看到一些不可能的事情。

所以,答案是——这是不可能的

Laravel不支持这个功能,这真的很遗憾


我在Laravel源代码中修复了它,这里是我的PULL请求-

通过这个“usingid”你到底想做什么。您希望从查询中得到什么样的结果。据我所知,文档和API中并不存在您想要的结果。你可以提出请求把它包括进去@AlankarMore,我有一个非常复杂的查询,使用SELECT*FROM SELECT*with JOIN。当我在连接打开的情况下进行子查询时,结果是有两列具有相同的名称id。并且在重复列时出错。使用很容易修复,因为它只返回一个列id。其他选项-不要在SELECT中使用table_name.*,但如果我可以用简单的MySQL命令修复它,它太长而且错误。@El_Matella,是的,现在我明白了。当然,我可以修复它,并提出拉请求,但这是一个漫长的道路。现在,我正在寻找一些丑陋的黑客,这是工作,我只是将它隐藏在一个很好的范围内,它完成了。你真的需要表中的所有字段吗?如果没有,则可以为重复列创建别名。可能您已经尝试过了,但只是一个建议,您可以使用它,如SELECT table.id as tableId FROM table。这正是我的问题-是的,我很惊讶这是不可能的