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