eloquent获取最新的join in join子句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了eloquent获取最新的join in join子句相关的知识,希望对你有一定的参考价值。

我使用laravel 5.2我试图获得每个外键pmt_id的最新介入,如下:

$res = $this->model->with('typo', 'nro', 'ctr', 'cad', 'pm')

            ->join('a2t_intervention',function ($join) use ($salar){
                    $join->on('a2t_intervention.pmt_id','=','a2t_pmt.id');
                    $join->whereRaw('a2t_intervention.pmt_id = (select max(`pmt_id`) from a2t_intervention)');
                $join->where('a2t_intervention.etat_intervention','like','nok');
                $join->whereIN('a2t_intervention.id_equipe_stt',$salar);

            });

但我得到这个错误:调用未定义的方法Illuminate Database Query JoinClause :: whereRaw()

我尝试其他方式,但没有什么对我有用。

对于表干预中的每个pmt_id,我们至少有一条记录,我正在寻找在与表PMT连接之前获取最后一次干预foreach单个pmt_id。如何在最新的pmt_id中从表干预中选择id,如sql query中的bellow:

SELECT t.*
  FROM ( SELECT pmt_id
              , MAX(id) AS id
           FROM a2t_intervention 
           WHERE etat_intervention = 'nok' 
            AND `id_equipe_stt` IN ('" . implode(',', $id_equipe_stt) . "')
         GROUP
             BY pmt_id ) AS m
INNER JOIN a2t_intervention AS t
    ON t.pmt_id = m.pmt_id
   AND t.id = m.id
答案

错误是不言自明的 - 没有whereRaw方法。您可以尝试替换:

$join->whereRaw('a2t_intervention.pmt_id = (select max(`pmt_id`) from a2t_intervention)');

$join->where('a2t_intervention.pmt_id',  '=',  DB::raw("(select max(`pmt_id`) from a2t_intervention)"));

在后来的Laravel版本中,JoinClause扩展了Builder,因此whereRaw方法可用,但对于Laravel 5.2,它不是。

以上是关于eloquent获取最新的join in join子句的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent Join vs Inner Join?

Laravel Eloquent 关系——相当于 MYSQL “join”

Laravel Eloquent LEFT JOIN WHERE NULL

Left Join - 在 Eloquent 中

Laravel Eloquent ORM 中的 join()->where()

MySQL/Eloquent force id by left join 即使为空