Конструктор запросов Laravel дублирует строку - PullRequest
0 голосов
/ 14 ноября 2018

Я печатаю некоторые данные в файле mi index.blade.php, но он возвращает дублированные значения.Это мой запрос:

$hist = DB::table('codigo_sisnova')
            ->join('llamada', 'codigo_sisnova.idPaciente', '=', 'llamada.id_paciente')
            ->join('medico', 'llamada.id_medico', '=', 'medico.id_medico')
            ->where('llamada.status_llamada', 'Finalizada')
            ->where(function($query){
                $query->where('llamada.status_pago', '=', 'Sisnova')
                ->orWhere('llamada.status_pago', '=', 'RedireccionadaSisnova');
            })
            ->distinct()
            ->get();

Я уже пробовал с unique () , но он тоже не работает.

EDIT

Отношения между таблицами однозначно от "codigo_sisnova" до "llamada", если я уберу объединение с таблицей "medico", строки будут дублироваться

Каждая строка получит дубликат

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Вам не хватает оператора group_by. Предполагая, что у вас есть столбец ID в codigo_sisnova, помимо добавления его в предложение SELECT, вам нужно добавить его перед вашим методом get ():

$hist = DB::table('codigo_sisnova')
        ->select('codigo_sisnova.id')
        ->join('llamada', 'codigo_sisnova.idPaciente', '=', 'llamada.id_paciente')
        ->join('medico', 'llamada.id_medico', '=', 'medico.id_medico')
        ->where('llamada.status_llamada', 'Finalizada')
        ->where(function($query){
            $query->where('llamada.status_pago', '=', 'Sisnova')
            ->orWhere('llamada.status_pago', '=', 'RedireccionadaSisnova');
        })
        ->group_by('codigo_sisnova.id')
        ->get();
0 голосов
/ 14 ноября 2018

У вас будет несколько codigo_sisnova строк, если вы будете объединять таблицы, в которых есть несколько совпадений в этой таблице. DISTINCT не исключит их, так как объединенные данные сделают их не различимыми в этих результатах. Я бы порекомендовал попробовать использовать groupBy() для устранения лишних строк.

...