Область запросов Laravel Eloquent с объединением, использующим DB :: raw - PullRequest
0 голосов
/ 25 января 2019

У меня есть область запроса из приложения L5.1, которое не работает на L5.7. Область действия добавляет простое соединение с оператором DB :: raw, например:

    public function scopeLatest($query)
    {
        return $query->join(DB::raw('(SELECT patient_id, MAX(created_at) created_at FROM referral_reports GROUP BY patient_id) r2'), function ($join) {
                            $join->on('referral_reports.patient_id', '=', 'r2.patient_id');
                            $join->on('referral_reports.created_at', '=', 'r2.created_at');
                            });
    }

Использование этой области действия в L5.1 работало замечательно, но в 5.7 все соединение не включается в запрос и не выдается никакой ошибки. Мне пришлось использовать DB :: enableQueryLog () в обоих приложениях, чтобы увидеть, что результирующие запросы были разными.

Есть идеи, почему это не работает в 5.7?

Вот пример использования этой области с помощью статического метода на модели:

        $entries = self::inStudies($studies)
                       ->calltime($startDate, $endDate)
                       ->latest()
                       ->omitdeleted()
                       ->get();

inStudies, calltime, latest, omitdeleted - все области запроса.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Ваша область не работает, потому что она конфликтует с методом latest. Просто переименуйте эту область, и она будет работать.

latest / oldest методы были добавлены в Laravel 5.3

0 голосов
/ 25 января 2019

Вы добавили использование БД; сверху?

Попробуйте это

public function scopeLatest($query){

return $query->join('referral_reports.patient_id', '=', 'r2.patient_id')

    ->join('referral_reports.created_at', '=', 'r2.created_at')

    ->select(DB::raw('SELECT patient_id, created_at) r2'));
}

Обычно я запускаю группу с контроллера

Модель :: последняя () -> тах ( 'created_at') -> группеПо ( 'patient_id')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...