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 连接之前获取每个单个 pmt_id 的最后干预。如何在最新的 pmt_id 中从表干预中选择 id,如下面的 sql 查询:
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 则不可用。
推荐阅读
- css - 使网格区域更喜欢缩小
- javascript - 如何解决canvas JS lineWidth问题?
- python - Facebook Business Manager 结果指标通过 API (python)
- c - 查找C中输入的最后一个单词的长度。在while循环部分,if语句永远不会到达else部分,如何解决这个问题?
- java - 如何为 Firebase 创建 CheckBoxPreference?
- elasticsearch - 防止 Elasticsearch 中多个索引的数据重复
- c# - ASP.Net MVC 发送新的对象来查看用坏数据填充一些字段
- reactjs - 将 DOM 元素渲染到 webGL
- javascript - 根据之前的答案 nodejs 显示表单输入
- php - yii2gridview行内的模态窗口按钮