使用Laravel eloquent从一组外键中获取最后一个id

时间:2018-03-15 17:23:04

标签: sql laravel postgresql eloquent

我与名为idavaliacao的主键和名为trabalho_idtrabalho的外键有关系,我想通过idavaliacao,desc获得每个外键顺序的最后一个元组。
例如:

idavaliacao | trabalho_idtrabalho  
------------+--------------------  
     1      |         1  
     2      |         1  
     3      |         2  
     4      |         3  
     5      |         3   
     6      |         4  

返回:

idavaliacao | trabalho_idtrabalho  
------------+--------------------  
     2      |         1  
     3      |         2  
     5      |         3   
     6      |         4  

Eloquent Queries:

$ids = Trabalho::where([['trabalho.eventos_ideventos',$evento->ideventos],['eixos_tematicos_ideixos_tematicos',$id_eixo]])->get(['trabalho.idtrabalho'])->toArray();

$avaliacao = Avaliacao::whereIn('trabalho_idtrabalho',$ids)->to be continued

2 个答案:

答案 0 :(得分:0)

以下是答案 -

select * from yourtable t1 
where t1.idavaliacao =
(select max(idavaliacao) from yourtable t2 where t2.trabalho_idtrabalho=
                    t1.trabalho_idtrabalho)

点击此处 - http://sqlfiddle.com/#!9/41d3c6/22

答案 1 :(得分:0)

HasOne模型添加Trabalho relationship

public function avaliacao() {
    return $this->hasOne(Avaliacao::class, 'trabalho_idtrabalho', 'idtrabalho')
        ->orderByDesc('idavaliacao');
}

然后使用eager loading

$trabalho = Trabalho::where([['trabalho.eventos_ideventos',$evento->ideventos], 
       ['eixos_tematicos_ideixos_tematicos',$id_eixo]])->with('avaliacao')
   ->get(['idtrabalho']);

$avaliacao = $trabalho->pluck('avaliacao');