eloquent получить последнее сырье в предложении соединения - PullRequest
0 голосов
/ 10 сентября 2018

Я использую 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_id перед созданием соединения с таблицей PMT. Как выбрать идентификатор из таблицы вмешательства в последнем pmt_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

1 Ответ

0 голосов
/ 10 сентября 2018

Ошибка довольно очевидна - метода 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 его нет.

...