Laravel - Trazer Registro mesmo quando o campo não estiver preenchido

3 respostas Resolvido
laravel
Cleiton_Conceicao

gente, existe registro que não possui psicólogos cadastrados o campo no banco é psi_nome.
devido a isso quando eu utilizo a funcionalidade de pesquisar ele acaba não vindo na consulta.

$pac = Paciente::leftjoin('psicologos','psicologos.psi_codigo','pacientes.psi_codigo')
           ->select('pacientes.pac_prontuario','pacientes.pac_nome_paciente','psicologos.psi_nome','pacientes.pac_codigo')
            ->where('pacientes.pac_prontuario','LIKE',"%".$request->prontuario."%")
            ->where('pacientes.pac_nome_paciente','LIKE',"%".$request->paciente."%")
            ->where('psicologos.psi_nome','LIKE',"%".$request->respAte."%")
            ->where('pacientes.emp_codigo', '=', session('empresa_id')) 
           ->orderBy('pacientes.pac_nome_paciente')
           ->paginate(10);


// esse a a condição que está me dando dor de cabeça..
>where('psicologos.psi_nome','LIKE',"%".$request->respAte."%")

3 Respostas

javaflex

Não sei que gambiarra é essa, mas independente disso pegue o SQL gerado e teste diretamente no banco pra identificar o problema.

Cleiton_Conceicao

eu queria por um coalesce no laravel.como faço?

preciso que a consulta retorne assim…

select * from pacientes p left join psicologos ps on p.psi_codigo=ps.psi_codigo
where  
pac_prontuario like '%%' and
pac_prontuario like '%%'
and pac_nome_paciente like '%%' and coalesce(psi_nome,'') like '%%'
Cleiton_Conceicao
Solucao aceita

Dei uma lida sobre DB::raw do laravel,
que permite escrever um trecho de código sql.

$pac = Paciente::leftjoin('psicologos','psicologos.psi_codigo','pacientes.psi_codigo')
           ->select('pacientes.pac_prontuario','pacientes.pac_nome_paciente','psicologos.psi_nome','pacientes.pac_codigo')
            ->where('pacientes.pac_prontuario','LIKE',"%".$request->prontuario."%")
            ->where('pacientes.pac_nome_paciente','LIKE',"%".$request->paciente."%")
            ->where(DB::raw('coalesce(psicologos.psi_nome,"")'),'LIKE',"%".$request->respAte."%")
            ->where('pacientes.emp_codigo', '=', session('empresa_id')) 
            ->orderBy('pacientes.pac_nome_paciente')
            ->paginate(10);

trecho do código com o coalesce
->where(DB::raw('coalesce(psicologos.psi_nome,"")'),'LIKE',"%".$request->respAte."%")
Criado 10 de maio de 2019
Ultima resposta 11 de mai. de 2019
Respostas 3
Participantes 2