0

我正在尝试从“interviews”表中获取每个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();

我雄辩地尝试过这个:

    $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 中相同的查询,但我得到了不同的结果:(

任何提示?

提前致谢!

4

1 回答 1

1

因为您正在使用->select('interviews.*', 'i2.*')结合->whereNull('i2.candidate_id')我假设第二个选择参数覆盖了 interviews 表上的所有字段,所以nulls尝试将顺序反转为->select('i2.*','interviews.*')或根本不使用i2.*

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

希望它有效。

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

于 2017-01-20T16:20:42.457 回答