Lançado Adianti Framework 7.6!
Clique aqui para saber mais
multi-filial com id da filial na chave ? Boa noite pessoal! Sou novo na lista e estou conhecendo o adianti, e uma das minhas duvidas é o seguinte tem como desenvolver um sistema com multi-filial, ou seja o id da chave ser composta nas chaves da tabela? Eu estou assistindo as videos aula do pablo e vejo ele colocar somente um campo como chave primaria nas tabelas das classes!...
AA
multi-filial com id da filial na chave ?  
Fechado
Boa noite pessoal!
Sou novo na lista e estou conhecendo o adianti, e uma
das minhas duvidas é o seguinte tem como desenvolver um sistema com multi-filial, ou seja o id da chave ser composta nas chaves da tabela? Eu estou assistindo as videos aula do pablo e vejo ele colocar somente um campo como chave primaria nas tabelas das classes!

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (9)


LC

Também sou novo no Adianti, mais pelo que vi, só trabalha com chave unica, acho que vi o Pablo escrever sobre isso em algum lugar aqui.
No meu caso, onde eu tinha chave composta, eu mudei a tabela criando um ID para chave unica e depois a chave composta eu criando um indice unico, assim resolveu pra mim.
MD

A algum temo atrás tive uma necessidade parecida, e postei aqui no forum.

De uma olhada no link abaixo, acho que ele poderá lhe ajudar, utilizando essa feature, eu tinha links do tipo: ip/index.php?class=Classe&method=Metofo&key=1&key2=123 em uma datagrid.

www.adianti.com.br/forum/pt/view_728?key-da-tdatagrid
FC

Não sei mas acho que é o caso de criar uma composição ex: id , filial_id.... não entendo como se usa chave composta.
MD

Pelo que entendi, ele vai ter uma listagem das filiais, e ao selecionar uma, as listagens seguintes, teriam que trabalhar apenas com a filiam Y por exemplo, ou seja, eventuais select no banco, sempre teriam de filtrar o ID da filial.

Meu caso era mais ou menos parecido.

O que fiz foi ter uma primeira listagem, com a key normal: class=Classe&method=Metodo&key=1

Essa listagem, levava a uma segunda listagem, mas, nesta listagem, apenas poderia mostrar os dados que batessem com uma devida key, logo, no construct dessa segunda classe lia o ID enviado e armazenada ele:

  1. <?php
  2.         // busca o ID da conta pasado pela URL
  3.         $this->id_conta Functions::get_key();
  4. ?>


Esse ID é usado no meu meto onReload para carregar somente objetos que se encaixem num determinado critério montado.

Beleza, nessa segunda listagem, ao montar as actions usava o abaixo:

  1. <?php
  2.         $action = new TAction(array($this'onSearch'));
  3.         $action->setParameter('key'$this->id_conta); // Aqui o ID do primeiro objeto, que veio da primeira listagem
  4.         $find_button->setAction($action'Buscar Movimentos');
  5.         $find_button->setImage('ico_find.png');
  6. ?>


Continuando, nessa segunda listagem, ao criar a datagrid, usava o abaixo:

  1. <?php
  2.         $this->datagrid = new TDataGridSetKey;
  3.         $this->datagrid->setHeight(320);
  4.         $this->datagrid->setKey('id_movimento'); // Esse é o "novo" metodo implementado na classe que foi sobrescrita, que seta uma nova key para a TDataGrid
  5. ?>


Isso "tudo" acabava gerando, na segunda listagem, links do tipo: class=Classe2&method=Metodo&key=1&id_movimento=1856

Notem que há duas key no mesmo link, logo, qualquer ação leva o id do primeiro objeto, e o ID do segundo objeto que havia sido adicionado a segunda datagrid.

Espero ter me feito entender, val lembrar que isso foi implementado na versão antiga do framework, mas, deve funcionar sem problemas na nova versão também se



AA

Obrigado a todos que responderam a minha duvida. Vou estudar cada uma das respostas.
PD

E aí pessoal,

Um sistema multi filial não necessariamente precisa de chaves compostas para funcionar. Vamos aos exemplos.

Multi filial significa que tanto suas compras, vendas, terão uma chave estrangeira apontando para a filial onde ocorreu o evento. Mas cada compra e cada venda DEVE ter seu ID próprio. Não faz sentido repetir o ID de uma compra/venda em filiais diferentes, ou seja ter a compra 4 na filial 1 e outra compra 4 na filial 2. O registro deve ser único. Não devemos olhar para o ID e compreender ele como um contador, pois ele não é, é simplesmente um identificador de registro na base de dados.

Assim, a recomendação geral para funcionar de maneira adequada no framework é que cada tabela tenha uma chave primária única, de preferência que o nome seja ID, para simplificar. E chaves estrangeiras como filial_id ou id_filial.

Para aqueles que usam chave composta para evitar duplicações, não é necessário. Veja um exemplo de uma tabela de turmas. Uma TURMA pode ter ID, professor_id, semestre_id, disciplina_id, dia_id. Não queremos ter mais de uma turma, com o mesmo professor, mesma disciplina, semestre e dia da semana. Então ID é chave primária, já os outros (professor_id, semestre_id, disciplina_id, dia_id) formam um UNIQUE INDEX.

Já em outros casos. Vamos pegar uma VENDA (ID, loja_id, cliente_id, data, valor_total). Ainda temos a VENDA_ITENS... Aqui ID é chave primária e só. Não vejo a necessidade de impedir ter mais de uma venda para a mesma combinação de loja/cliente/data, pois um cliente PODE fazer mais de uma compra na mesma loja/cliente/data.

Na linha do que o Marco propôs, eu faria o usuário escolher a filial na tela de login. Manteria a filial na sessão, e deixaria ela como filtro embutido e transparente em várias telas do sistema (datagrids, em geral).

Espero ter colaborado com mais 0,50 cents :-)

Abraços,
Pablo
AA

Bom dia a todos ! Eu estou iniciando agora em php e escolhi o adianti para tal.

A pergunta que fiz acima, foi porque já tenho um sistema desenvolvido no delphi, e ele é multi-filial com chaves composta, e ao ver as videos do Pablo entrei em duvida de como desenvolver todas as classes das tabelas que já estão populadas. Lembrando que tenho chaves estrangeiras compostas assim tambem por toda parte no banco de dados.
AA

Bom dia Pablo! Seu livro chegou pra mim, vou le-lo e pra alavancar os meus conhecimentos em php. Desde já meu obrigado.
AA

Bom dia Pablo! Seu livro chegou pra mim, vou le-lo e pra alavancar os meus conhecimentos em php. Desde já meu obrigado.