Yii Framework Forum: Yii 2 - Criando e atualizando tabelas usando um único form - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Yii 2 - Criando e atualizando tabelas usando um único form Rate Topic: -----

#1 User is offline   rabugento 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 02-March 15

Posted 03 March 2015 - 08:18 AM

Olá pessoal,

Sou iniciante no Yii e estou com uma dúvida sobre inserção e atualização de dados usando tabelas diferentes com o mesmo form.
Encontrei tópicos parecidos no fórum, mas a sintaxe é para o Yii 1.x. Estou usando o Yii 2.

Para exemplificar, estou tomando como exemplo essa imagem no anexo.

Peço que alguém possa me ajudar, explicando um passo-a-passo sobre como relacionar essas tabelas e criando um único form para inserir e atualizar as informações das tabelas.

Por favor, peço que se alguém puder me ajudar, eu agradeço desde agora.

Obrigado.

Attached File(s)


0

#2 User is offline   Levi Saturnino 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 14-January 15

Posted 08 March 2015 - 01:11 AM

Olá Rabugento, eu posso te ajudar sim. Mas preciso de mais detalhes do que vc quer fazer!.
0

#3 User is offline   rabugento 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 02-March 15

Posted 08 March 2015 - 03:30 PM

Quote

Olá Rabugento, eu posso te ajudar sim. Mas preciso de mais detalhes do que vc quer fazer!.


Olá Levi,

Estou estudando Yii 2 há pouco mais de 1 mês e estou travado com relação a inserir registros usando um único form em mais de uma tabela.
A documentação do Yii 2 ainda está incompleta nessa parte, por isso que estou pedindo ajuda no fórum.
O Gii é útil para auxiliar na criação de MVC usando uma única tabela, mas não para mais de uma tabela em conjunto.

Como vc pode ver na figura acima, peguei esse exemplo para usar como guia.
Queria que alguém pudesse me ajudar a criar um form para essas 2 tabelas, que pudesse adicionar e editar registros nessas tabelas.

Agradeço se alguém puder me ajudar.
0

#4 User is offline   Lucas Monteiro 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 06-September 15

Posted 08 September 2015 - 07:30 PM

Alguem conseguiu auxiliar o amigo em sua duvida? Pois tenho o mesmo problema.

Fiz este modelo, porem não consigo inserir no banco:

public function actionCreate()
    {
        $pessoa = new Pessoa();
        $pessoa_fisica = new PessoaFisica();
        $pessoa_juridica = new PessoaJuridica();
        $telefone = new Telefone();

        $postData = Yii::$app->request->post();

        if($pessoa->load($postData) && $pessoa_fisica->load($postData) 
            && $pessoa_juridica->load($postData) && $telefone->load($postData)
            && Model::validateMultiple([$pessoa, $pessoa_fisica, $pessoa_juridica, $telefone])
            ){

            $pessoa->save();
            $pessoa_fisica->save();
            $pessoa_juridica->save();
            $telefone->save();
            return $this->redirect(['pessoa/view', 'id' => $id]);

        } 
        else { 
            return $this->render('create', [
            'pessoa' => $pessoa,
            'pessoa_fisica' => $pessoa_fisica,
            'pessoa_juridica' => $pessoa_juridica,
            'telefone' => $telefone,
            ]);
        }
    }


Agradeço desde já.
0

#5 User is offline   Cálcio 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 199
  • Joined: 15-July 13
  • Location:Brasil - RJ

Posted 09 September 2015 - 12:04 PM

Por um acaso, um colega postou no grupo do G+. Talvez ajude a entender o conceito.

https://github.com/y...abular-input.md
Se minha resposta te ajudou, clique no link "Vote this post up".
If my answer help you, please check the "Vote this post up".
0

#6 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 843
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 10 September 2015 - 09:02 AM

Rabugento,

Você está com dúvida em inserção e atualização em qual tabela?

Posta uma imagem do form, e explique melhor quais as tabelas que você irá trabalhar.
Newerton Vargas de Araújo
0

#7 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 843
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 10 September 2015 - 09:04 AM

Lucas,

No se formulário, você tem 4 tipo de cadastro?
De Pessoa, PessoaFisica, PessoaJuridica e Telefone?


View PostLucas Monteiro, on 08 September 2015 - 07:30 PM, said:

Alguem conseguiu auxiliar o amigo em sua duvida? Pois tenho o mesmo problema.

Fiz este modelo, porem não consigo inserir no banco:

public function actionCreate()
    {
        $pessoa = new Pessoa();
        $pessoa_fisica = new PessoaFisica();
        $pessoa_juridica = new PessoaJuridica();
        $telefone = new Telefone();

        $postData = Yii::$app->request->post();

        if($pessoa->load($postData) && $pessoa_fisica->load($postData) 
            && $pessoa_juridica->load($postData) && $telefone->load($postData)
            && Model::validateMultiple([$pessoa, $pessoa_fisica, $pessoa_juridica, $telefone])
            ){

            $pessoa->save();
            $pessoa_fisica->save();
            $pessoa_juridica->save();
            $telefone->save();
            return $this->redirect(['pessoa/view', 'id' => $id]);

        } 
        else { 
            return $this->render('create', [
            'pessoa' => $pessoa,
            'pessoa_fisica' => $pessoa_fisica,
            'pessoa_juridica' => $pessoa_juridica,
            'telefone' => $telefone,
            ]);
        }
    }


Agradeço desde já.

Newerton Vargas de Araújo
0

#8 User is offline   Lucas Monteiro 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 06-September 15

Posted 10 September 2015 - 01:59 PM

Na verdade é um unico cadastro, as tabelas PessoaFisica e PessoaJuridia são uma especialização da tabela Pessoa, e a tabela Telefone armazena os telefones linkado a tabela Pessoa, assim posso armazer 1 ou mais telefones para as pessoas.

A questão do insert nas tabelas eu consegui resolver da seguinte forma(Porem ainda tenho o problema de nao ter que fazer o insert na pessoafisica ou juridica junto, cada hora deve ser uma condição diferente):

public function actionCreate()
    {
        $pessoa = new Pessoa();
        $pessoa_fisica = new PessoaFisica();
        $pessoa_juridica = new PessoaJuridica();
        $telefone = new Telefone();

        $postData = Yii::$app->request->post();
        
        
        if($postData){
            
            $transaction = Yii::$app->db->beginTransaction();
            try {
                $pessoa->datacadastro = Yii::$app->formatter->asDate('now', 'yyyy-MM-dd');
                $pessoa->load($postData);
                if(!$pessoa->save()){
                    print_r($pessoa->getErrors());
                    die();
                };

                $pessoa_fisica->datanascimento
                $pessoa_fisica->codpessoa = $pessoa->codpessoa;    
                $pessoa_fisica->load($postData);
                if(!$pessoa_fisica->save()){
                    print_r($pessoa_fisica->getErrors());
                    die();
                    
                };
                $pessoa_juridica->codpessoa = $pessoa->codpessoa;
                $pessoa_juridica->load($postData);
                if(!$pessoa_juridica->save()){
                    print_r($pessoa_juridica->getErrors());
                    //die();
                    
                };

                $telefone->codpessoa = $pessoa->codpessoa;
                $telefone->load($postData);
                if(!$telefone->save()){
                    $telefone->save();
                    print_r($telefone->getErrors());
                    die();
                };
                
                
                $transaction->commit();
            } catch (\Exception $e) {
                $transaction->rollBack();
                throw $e;
                return $this->redirect(['pessoa/view', 'id' => $id]);

            }
        }
        
        return $this->render('create', [
            'pessoa' => $pessoa,
            'pessoa_fisica' => $pessoa_fisica,
            'pessoa_juridica' => $pessoa_juridica,
            'telefone' => $telefone,
            ]);
    }


View PostNewerton, on 10 September 2015 - 09:04 AM, said:

Lucas,

No se formulário, você tem 4 tipo de cadastro?
De Pessoa, PessoaFisica, PessoaJuridica e Telefone?

0

#9 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 843
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 10 September 2015 - 02:48 PM

Lucas,

Então a ordem seria, salvar primeiro a Pessoa, depois PessoaFisica OU PessoaJuridica (dependendo da opção que o cliente escolher) e depois os Telefones?


View PostLucas Monteiro, on 10 September 2015 - 01:59 PM, said:

Na verdade é um unico cadastro, as tabelas PessoaFisica e PessoaJuridia são uma especialização da tabela Pessoa, e a tabela Telefone armazena os telefones linkado a tabela Pessoa, assim posso armazer 1 ou mais telefones para as pessoas.

A questão do insert nas tabelas eu consegui resolver da seguinte forma(Porem ainda tenho o problema de nao ter que fazer o insert na pessoafisica ou juridica junto, cada hora deve ser uma condição diferente):

public function actionCreate()
    {
        $pessoa = new Pessoa();
        $pessoa_fisica = new PessoaFisica();
        $pessoa_juridica = new PessoaJuridica();
        $telefone = new Telefone();

        $postData = Yii::$app->request->post();
        
        
        if($postData){
            
            $transaction = Yii::$app->db->beginTransaction();
            try {
                $pessoa->datacadastro = Yii::$app->formatter->asDate('now', 'yyyy-MM-dd');
                $pessoa->load($postData);
                if(!$pessoa->save()){
                    print_r($pessoa->getErrors());
                    die();
                };

                $pessoa_fisica->datanascimento
                $pessoa_fisica->codpessoa = $pessoa->codpessoa;    
                $pessoa_fisica->load($postData);
                if(!$pessoa_fisica->save()){
                    print_r($pessoa_fisica->getErrors());
                    die();
                    
                };
                $pessoa_juridica->codpessoa = $pessoa->codpessoa;
                $pessoa_juridica->load($postData);
                if(!$pessoa_juridica->save()){
                    print_r($pessoa_juridica->getErrors());
                    //die();
                    
                };

                $telefone->codpessoa = $pessoa->codpessoa;
                $telefone->load($postData);
                if(!$telefone->save()){
                    $telefone->save();
                    print_r($telefone->getErrors());
                    die();
                };
                
                
                $transaction->commit();
            } catch (\Exception $e) {
                $transaction->rollBack();
                throw $e;
                return $this->redirect(['pessoa/view', 'id' => $id]);

            }
        }
        
        return $this->render('create', [
            'pessoa' => $pessoa,
            'pessoa_fisica' => $pessoa_fisica,
            'pessoa_juridica' => $pessoa_juridica,
            'telefone' => $telefone,
            ]);
    }


Newerton Vargas de Araújo
0

#10 User is offline   Lucas Monteiro 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 06-September 15

Posted 10 September 2015 - 04:06 PM

Correto isso mesmo, salva a Pessoa, PessoaFisica ou PessoaJuridica(De acordo com a opção escolhida no radioList) e depois os telefones.

Obrigado.

View PostNewerton, on 10 September 2015 - 02:48 PM, said:

Lucas,

Então a ordem seria, salvar primeiro a Pessoa, depois PessoaFisica OU PessoaJuridica (dependendo da opção que o cliente escolher) e depois os Telefones?

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users