Перезапись SQL запроса в Laravel, но с ошибкой BadMethodCallException: вызов неопределенного метода - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь выполнить этот запрос в Laravel.

SELECT DISTINCT curriculum.Course_Code, transcript.Course_Grade, transcript.Course_Comp, transcript.CWID 
FROM curriculum 
LEFT JOIN transcript 
ON curriculum.Course_Code = transcript.Course_Code AND transcript.CWID = "C38475920";

За исключением того, что я больше не использую stati c CWID -> "C38475920". Вот что у меня есть:

public function getProgress($id){
    return DB::table('curriculum')
    ->select('curriculum.Course_Code','transcript.Course_Comp', 'transcript.Term_Completed', 'transcript.Course_Grade')
    ->distinct('curriculum.Course_Code')
    ->leftJoin('transcript', 'curriculum.Course_Code','=','transcript.Course_Code')
    ->on('CWID', '=', $id)
    ->get();
  }

Функция выдает эту ошибку BadMethodCallException: Call to undefined method Illuminate\Database\Query\Builder::on() in file

Нужно ли что-то добавить в мою модель, чтобы использовать ON?

1 Ответ

1 голос
/ 02 апреля 2020

Если вы хотите использовать в своем объединении предложение стиля where, вы можете использовать методы where в объединении. Вместо сравнения двух столбцов эти методы будут сравнивать столбец со значением.

Вместо select можно использовать метод selectRaw (DB :: raw (...)). Этот метод принимает необязательный массив привязок в качестве второго аргумента.

DB::table('curriculum')
      ->selectRaw('DISTINCT curriculum.Course_Code, transcript.Course_Grade, transcript.Course_Comp, transcript.CWID')
      ->leftJoin('transcript', function ($leftJoin) use ($id) {
            $leftJoin->on('curriculum.Course_Code', '=', 'transcript.Course_Code')
                 ->where('transcript.CWID', '=', $id);
        })
      ->get();
...