[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Juliano da Silva Silva
Criador Juliano da Silva Silva 27/05/2020

Olá, tenho um banco de dados com as seguintes tabela:

 

vendas (id, consumidor_id, produto_id, vendedor_id, status)

consumidores (id, nome, email, telefone, endereco, senha)

produto (id, nome, valor)

vendedor (id, nome, email, senha)

comisao (id, nome, tipo, valor)

afiliado (vendedor_id, vendedor_filho_id)

 

E to com dificuldade para criar uma relação onde eu pego todas as vendas do vendedor logado + vendas dos vendedores filhos do vendedor logado,

alguma sugestão de como organizar essa estrututra ?

Manager Carlos Ferreira 27/05/2020

Olá, Juliano!
Tudo bem?

Na tabela afiliado é onde vai registrar as vendas?

Você pode trabalhar com relacionamentos polymorphic: https://laravel.com/docs/7.x/eloquent-relationships#many-to-many-polymorphic-relations

https://www.youtube.com/watch?v=1P7aPUh5WLQ

Ou, não criar a FK na tabela, e deixar o valor pré-definido com nullable(), assim você pode ter uma coluna diferente para cada tipo de relação possível.

Pegou a ideia amigo?

Carlos Ferreira
Criador Juliano da Silva Silva 27/05/2020

As vendas são registradas na tabela de vendas com o código do vendedor, código do produto e código do consumidor.

vendas (id, consumidor_id, produto_id, vendedor_id, status)

 

O vendedor pode ter um afiliado, ou seja, ele pode estar ligado a alguma pessoa e essa pessoa quando faz uma venda aparece no painel do vendedor também.

vendedor (id, nome, email, senha)

 

A comissão é ligada ao vendedor por exemplo:

João ganha 5% em cada venda direta e 2% em cada venda do Juliano

comisao (id, nome, tipo, valor)

 

Logo eu criei essa tabela de afiliado para fazer a ligação do vendedor 1 com  vendedor 2 e saber quais as vendas do vendedor 2 também fazem parte das vendas do vendedor 1

afiliado (vendedor_id, vendedor_filho_id)

Juliano da Silva Silva
Manager Carlos Ferreira 27/05/2020

Hahaha entendi, está fazendo uma Hinode (brincadeira amigo).

Está certinho, a tabela afiliados é N:N (Many to Many), porque relaciona vendedor com vendedor.

Sua linha de raciocínio está correta.

------

Você está usando cookies para identificar qual foi o vendedor que indicou a venda?
Se não pode usar, e no momento que for registrar a venda pega o cookie e direciona a comissão para os afiliados.

Carlos Ferreira
Criador Juliano da Silva Silva 27/05/2020

É quase uma Hinode q eu to fazendo mesmo, a linha de raciocinio ta indo só não ta saindo o código

kkkkkk

 

 

E quando a referencia o pessoal da empresa que que quem receba a porcentagem é a última pessoa que passou o link de afiliado então não coloquei cookies só mandei pra url o link ?refer=MEUCODIGO e se o consumidor tirar o codigo vai tudo pra empresa, gostaram da ideia de não pagar o afiliado :X

Juliano da Silva Silva
Criador Juliano da Silva Silva 27/05/2020

O sql que eu utilizo para consultas é esse abaixo

select parceiro_afiliado.*, vendas.*

from parceiro_afiliado

left join vendas on (vendas.vendedor_id = parceiro_afiliado.afiliado_id OR vendas.vendedor_id = 18)

where parceiro_id = 18 

group by vendas.id
Juliano da Silva Silva
Manager Carlos Ferreira 27/05/2020

Chegou a fazer o curso de relationships aqui da plataforma?

No seu caso eu abusaria um pouco mais do poder do Eloquent, porque você consegue chegar nessas tabelas relacionadas de forma mais simples.

Carlos Ferreira
Criador Juliano da Silva Silva 27/05/2020

Cheguei sim, fiz no youtube algum tempo atrás e essa semana fiz novamente aqui pelo portal pra ver se abria a mente mas aidna ta ofuscado o troço

Juliano da Silva Silva
Manager Carlos Ferreira 27/05/2020

Pra mim te ajudar assim fica meio vago, o que posso fazer é ir orientando e indicando os caminhos.

Se tiver o projeto no GitHub posso dá uma olhada e ver se consigo ajudar um pouco mais :-)

Carlos Ferreira
Criador Juliano da Silva Silva 27/05/2020

De boas, mandei mensagem no whatsapp mas responde aqui que fica registro

A relação bombou, só ficou agora a treta pra eu poder buscar todos os niveis acima to tentando um laço mas a cabeça a 5 dias no projeto já não enxerga mais as coisas como devem ser.

pra eu converter isso em um laço que identifique quantos parceiros tem to perdido.

$partner1 = Partner::first(); $partner2 = $partner1->affiliate(); $partner3 = $partner1->affiliate()->affiliate(); $partner4 = $partner1->affiliate()->affiliate()->affiliate();

Juliano da Silva Silva
Manager Carlos Ferreira 27/05/2020

Coloca o projeto no GitHub (pode ser privado mesmo) e eu  posso dá uma olhada e ver se consigo ajudar um pouco mais :-)

Carlos Ferreira
Criador Juliano da Silva Silva 27/05/2020

Fala mano consegui resolver a treta aqui da seguintes forma, criei uma função nos meus helpers pra fazer a iteração dos resultados

if (!function_exists('getAffiliates')) {
function getAffiliates($parceiro)
{
$afiliados = [];
$parceiro = $parceiro->afiliado_parceiros();
if ($parceiro) {
$afiliados[] = $parceiro;
$afiliados = array_merge($afiliados, getAffiliates($parceiro));
}
return $afiliados;
}
}

 

No model eu fiz com o belongs to many

public function afiliado_parceiros()
{
return $this->belongsToMany(
\App\Parceiro::class,
'parceiro_afiliado',
'afiliado_id',
'parceiro_id')->get()->first();
}

 

E no controller depois de localizar o codigo do vendedor chamei a função para pegar os afiliados parceiros

$vendedor = Parceiro::find(18);
$afiliados[] = $vendedor;
$afiliados = array_merge($afiliados, getAffiliates($vendedor));

foreach($afiliados as $afiliado) {
// Aqui adicionei os dados que precisava ao banco.
}
Juliano da Silva Silva
Manager Carlos Ferreira 27/05/2020

Que bom que conseguiu resolver. Meus parabéns!

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!