Laravel 5.3 查询 - 左连接一些 table

Laravel 5.3 Query - Left join some table

我正在尝试从“采访”table 中获取每个 candidate_id 的最新记录。

这就是我想要实现的目标:

我在 laravel 上使用 Eloquent 并且已经尝试过这些方法(使用和不使用 eloquent):

$candidates = DB::table('interviews')->select('interviews.*', 'i2.*')
->leftJoin('interviews as i2',
    function ($join) {
        $join->on('interviews.candidate_id', '=', 'i2.candidate_id');
        $join->on('interviews.created_at', '<', 'i2.created_at');
    }
)
->whereNull('i2.candidate_id')
->get();

和 eloquent 我试过这个:

    $candidates = Interview::leftJoin('interviews as i2',
    function ($join) {
        $join->on('interviews.candidate_id', '=', 'i2.candidate_id');
        $join->on('interviews.created_at', '<', 'i2.created_at');
    }
)->whereNull('i2.candidate_id')
->get();

如果我将 get() 更改为 toSql() 我的查询与上图中显示的查询完全相同,但是 运行 在 laravel 我总是得到这些结果(使用第一种方法,使用查询生成器):

有人知道我为什么会得到这个结果吗?很难理解 laravel 正在执行与我在 HeidiSql 中执行的相同的查询,但我得到不同的结果:(

有什么建议吗?

提前致谢!

因为您正在使用 ->select('interviews.*', 'i2.*') 结合 ->whereNull('i2.candidate_id') 我假设第二个 select 参数覆盖 table 和 nulls 采访中的所有字段,请尝试将顺序颠倒为 ->select('i2.*','interviews.*') 或根本不使用 i2.*

这是因为输出忽略了别名,只使用字段名作为返回集合中的元素键。

希望有用。

完美案例场景,您可以从每个连接的 table 中选择您想要的确切列,例如它可能是这样的:table1.id,table1.column1,table1.column2,table2.column2 as smth_so_it_doesnt_override