我尝试了很长时间才找到它,我不敢相信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:答案可能很简单,只是很难通过“使用”这个词找到,因为它无处不在。
UPDATE
我将更深入地了解源代码,尝试创建作用域或传递要加入的函数,但即使在该函数内部,我也无法使用此 $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 :)
}
所以即使忘记了scope,我也不能在DB::raw()中做到这一点,所以这是不可能的......我第一次看到Laravel中不可能的事情。