leftJoin('cadastro_cidadao_telefone', function ($join) { $join->on('cadastro_cidadao_telefone.cidadao_id', '=', 'cadastro_cidadao.id') ->where('cadastro_cidadao_telefone.principal', 1); }) ->leftJoin('cadastro_sexo', 'cadastro_sexo.id', 'cadastro_cidadao.sexo_id') ->leftJoin('cadastro_nacionalidade', 'cadastro_nacionalidade.id', 'cadastro_cidadao.nacionalidade_id') ->leftJoin('cadastro_raca_cor', 'cadastro_raca_cor.id', 'cadastro_cidadao.raca_cor_id') ->join('cadastro_paciente', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id') ->leftJoin('cadastro_domicilio', 'cadastro_domicilio.id', 'cadastro_cidadao.domicilio_id') ->leftJoin('cadastro_endereco', 'cadastro_endereco.id', 'cadastro_domicilio.endereco_id') ->leftJoin('cadastro_logradouro', 'cadastro_logradouro.id', 'cadastro_endereco.logradouro_id') ->leftJoin('cadastro_logradouro_tipo', 'cadastro_logradouro_tipo.id', 'cadastro_logradouro.tipo_id') ->leftJoin('cadastro_bairro', 'cadastro_bairro.id', 'cadastro_logradouro.bairro_id') ->whereNull('cadastro_cidadao.deleted_at') ->select([ 'cadastro_cidadao.cidadao_id', 'cadastro_paciente.id as paciente_id', 'cadastro_cidadao.nome AS name', 'cadastro_cidadao.cns', 'cadastro_cidadao.cpf', 'cadastro_cidadao.data_nascimento AS birthdate', DB::raw("COALESCE(cadastro_cidadao_telefone.numero, '-') AS phone"), 'cadastro_sexo.descricao AS sex', DB::raw("COALESCE(cadastro_cidadao.nome_mae, '-') AS motherName"), DB::raw("COALESCE(cadastro_nacionalidade.descricao, '-') AS nationality"), DB::raw("COALESCE(cadastro_raca_cor.descricao, '-') AS race"), 'cadastro_logradouro_tipo.descricao as type', 'cadastro_logradouro.nome as street', 'cadastro_endereco.numero as number', 'cadastro_bairro.nome as neighborhood', 'cadastro_logradouro.cep as zipCode' ]) ->distinct() ->orderBy('cadastro_cidadao.nome') ->get(); } public static function show($idPaciente) { $paciente = self::getPacienteModel($idPaciente); return (object) [ 'cidadao_id' => $paciente->cidadao_id, 'paciente_id' => $paciente->paciente->id, 'name' => $paciente->nome, 'cns' => $paciente->cns, 'cpf' => $paciente->cpf, 'birthdate' => Carbon::parse($paciente->data_nascimento)->format('Y/m/d'), 'phone' => $paciente->numero ?? '-', 'sex' => $paciente->sexo->descricao, 'motherName' => $paciente->nome_mae ?? '-', 'nationality' => $paciente->nacionalidade->descricao ?? '-', 'race' => $paciente->racaCor->descricao ?? '-', 'address' => [ 'street' => $paciente->domicilio->endereco->logradouro->tipo_nome ?? '-', 'number' => $paciente->domicilio->endereco->numero ?? '-', 'neighborhood' => $paciente->domicilio->endereco->logradouro->bairro->nome ?? '-', 'zipCode' => $paciente->domicilio->endereco->logradouro->cep ?? '-', ] ]; } private static function getPacienteModel($idPaciente) { $paciente = Cidadao::find($idPaciente); if (is_null($paciente)) { throw new PacienteNotFoundException(); } return $paciente; } }