lundi 30 octobre 2023

Get query results even with null foreign key

I have a query in which I have multiple relationships.

The foreign key 'acquirente_corretor_id' can be null or not. If it is different from null, it has a relationship with the dobby table.

I have the following query, but it only works for 'acquirente_corretor_id' that is not null. Only displays the result with this key other than null.

I want it to show the result of 'acquirente_corretor_id' even though it is null, merging.

One more thing, you only query the acquirer relationship if the variables $empresa_recebedora, $acquirente, $serial are different from null.

How to make? I've tried different forms of querying and it doesn't show.

$contratos = Contrato::with([
                    'parcela',
                    'cliente',
                    'status',
                    'operador',
                    'tabela',
                    'adquirente',
                    'bancos',
                    'bancos.empresa',
                    'bancos.banco',
                    'adquirente'
                ])
                    ->whereHas('cvs', function ($q) use ($cv) {
                        if (!is_null($cv)) {
                            $q->where('cv', $cv);
                        }
                    })
                    ->whereHas('bancos', function ($q) use ($banco, $empresa_pagadora) {
                        if (!is_null($banco)) {
                            $q->where('banco_id', $banco);
                        }
                        if (!is_null($empresa_pagadora)) {
                            $q->where('empresa_id', $empresa_pagadora);
                        }
                    })
                    ->whereHas('cliente', function ($q) use ($cliente) {
                        if (!is_null($cliente)) {
                            $q->where('nome', 'LIKE', "%{$cliente}%");
                        }
                    })
                    ->whereHas('adquirente.maquineta.empresa', function ($q) use ($empresa_recebedora) {
                        if (!is_null($empresa_recebedora)) {
                            $q->where('empresa_id', $empresa_recebedora);
                        }
                    })
                    ->whereHas('adquirente.maquineta.adquirente', function ($q) use ($adquirente) {
                        if (!is_null($adquirente)) {
                            $q->where('adquirente_id', $adquirente);
                        }
                    })
                    ->whereHas('adquirente.maquineta', function ($q) use ($serial) {
                        if (!is_null($serial)) {
                            $q->where('numero_serie', $serial);
                        }
                    })
                    ->when($status, function ($query, $status) {
                        $query->whereIn('contratos.status_id', $status);
                    })
                    ->when($ca, function ($query, $ca) {
                        $query->where('contratos.conciliacao_adquirente', $ca);
                    })
                    ->when($cb, function ($query, $cb) {
                        $query->where('contratos.conciliacao_bancaria', $cb);
                    })
                    ->when($operador, function ($query, $operador) {
                        $query->where('contratos.operador_id', $operador);
                    })
                    ->when($multiplicador, function ($query, $multiplicador) {
                        $query->where('contratos.multiplicador_id', $multiplicador);
                    })
                    ->when($gerente, function ($query, $gerente) {
                        $query->where('contratos.gerente_id', $gerente);
                    })
                    ->when($indicador, function ($query, $indicador) {
                        $query->where('contratos.indicador_id', $indicador);
                    })
                    ->when($valor_liquido, function ($query, $valor_liquido) {
                        $query->where('contratos.valor_liquido', 'LIKE', "{$valor_liquido}%");
                    })
                    ->where(function ($query) use ($inicio, $fim) {
                        if (!is_null($inicio) && !is_null($fim)) {
                            $query->whereBetween('data_operacao', [$inicio, $fim]);
                        }
                    })                    
                    ->orderBy($request->sortField, $sortOrder)
                    ->get()
                    ->each(function ($query) {
                        $pagadoras = $query->bancos;
                        foreach ($pagadoras as $pagadora) {
                            $empresas[] = $pagadora->empresa['nome'];
                            $bancos[] = $pagadora->banco['nome'];
                            $recebedores[] = $pagadora->cpf . ' - ' . $pagadora->nome;
                        }
        
                        $cvs = $query->cvs;
                        foreach ($cvs as $codigo) {
                            $codigos[] = $codigo->cv;
                        }
        
                        $query->empresas_pagadoras = implode(', ', $empresas);
                        $query->bancos_pagadores = implode(', ', $bancos);
                        $query->lista_codigos = implode(', ', $codigos);
                        $query->recebedores = implode(', ', $recebedores);
                    });

I tried solving it this way, but I get the following error:

Call to undefined method Illuminate\Database\Query\Builder::acquirente()

One more thing, you only query the acquirer relationship if the variables $empresa_recebedora, $acquirente, $serial are different from null

`$contratos = Contrato::with([ 'parcela', 'cliente', 'status', 'operador', 'tabela', 'bancos', 'bancos.empresa', 'bancos.banco', 'adquirente' ]) ->whereHas('cvs', function ($q) use ($cv) { if (!is_null($cv)) { $q->where('cv', $cv); } }) ->whereHas('bancos', function ($q) use ($banco, $empresa_pagadora) { if (!is_null($banco)) { $q->where('banco_id', $banco); } if (!is_null($empresa_pagadora)) { $q->where('empresa_id', $empresa_pagadora); } }) ->whereHas('cliente', function ($q) use ($cliente) { if (!is_null($cliente)) { $q->where('nome', 'LIKE', "%{$cliente}%"); } }) ->whereHas('adquirente', function ($q) use ($empresa_recebedora, $adquirente, $serial) { $q->whereHas('adquirente.maquineta.empresa', function ($q) use ($empresa_recebedora) { if (!is_null($empresa_recebedora)) { $q->where('empresa_id', $empresa_recebedora); } }) ->whereHas('adquirente.maquineta.adquirente', function ($q) use ($adquirente) { if (!is_null($adquirente)) { $q->where('adquirente_id', $adquirente); } }) ->whereHas('adquirente.maquineta', function ($q) use ($serial) { if (!is_null($serial)) { $q->where('numero_serie', $serial); } }); }) ->when($status, function ($query, $status) { $query->whereIn('contratos.status_id', $status); }) ->when($ca, function ($query, $ca) { $query->where('contratos.conciliacao_adquirente', $ca); }) ->when($cb, function ($query, $cb) { $query->where('contratos.conciliacao_bancaria', $cb); }) ->when($operador, function ($query, $operador) { $query->where('contratos.operador_id', $operador); }) ->when($multiplicador, function ($query, $multiplicador) { $query->where('contratos.multiplicador_id', $multiplicador); }) ->when($gerente, function ($query, $gerente) { $query->where('contratos.gerente_id', $gerente); }) ->when($indicador, function ($query, $indicador) { $query->where('contratos.indicador_id', $indicador); }) ->when($valor_liquido, function ($query, $valor_liquido) { $query->where('contratos.valor_liquido', 'LIKE', "{$valor_liquido}%"); }) ->where(function ($query) use ($inicio, $fim) { if (!is_null($inicio) && !is_null($fim)) { $query->whereBetween('data_operacao', [$inicio, $fim]); } }) ->orderBy($request->sortField, $sortOrder) ->get() ->each(function ($query) { $pagadoras = $query->bancos; foreach ($pagadoras as $pagadora) { $empresas[] = $pagadora->empresa['nome']; $bancos[] = $pagadora->banco['nome']; $recebedores[] = $pagadora->cpf . ' - ' . $pagadora->nome; }

            $cvs = $query->cvs;
            foreach ($cvs as $codigo) {
                $codigos[] = $codigo->cv;
            }

            $query->empresas_pagadoras = implode(', ', $empresas);
            $query->bancos_pagadores = implode(', ', $bancos);
            $query->lista_codigos = implode(', ', $codigos);
            $query->recebedores = implode(', ', $recebedores);
        });`


via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire