Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matheus P.

Cadastrar vários itens em uma venda no CakePHP

Recommended Posts

Preciso cadastrar uma venda com vários produtos, são duas dúvidas, utilizando o cakePHP, como eu faço para adicionar o ID da venda no produto no momento da requisição?

 

Dúvida 2, serão vários grupos de itens, com o "ID do produto" e o "Preço do produto", como fazer para o CakePHP salvar todos eles em linhas diferentes, ele salva somente o último produto cadastrado.

 

Resumindo, a venda é cadastrada na tabela Sale e os produtos da venda na tabela Item, onde serão vários com o ID da Venda, ID do Produto e o Preço do produto.

 

Esse é a parte do formulário, nos quais se repetem dependendo da vontade do usuário/vendedor, pode ser somente 1 ou até mesmo 100.

<?php
echo $this->Form->input('Item.product_id', array(
'type' => 'select',
'label' => false, 'div' => false,
'div' => false,
'empty' => true,
'options' => $products,
'class' => 'select2 form-control',
));
?>

<?php echo $this->Form->input('Item.amount', array(
'placeholder' => '0,00', 'label' => false, 'div' => false, 
'class' => 'form-control')); ?>
$this->request->data['Item']['sale_id'] = (COMO PEGAR?)
$data[] = $this->request->data;
$this->Item->saveAll($data);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dúvida 1.

Para recuperar o id após gravar no banco, você pode utilizar:

$saleId  = $this->Sales->id;
//debug($salesId);

Dúvida 2.

Dá uma lida aqui http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-savemany-array-data-null-array-options-array

Compartilhar este post


Link para o post
Compartilhar em outros sites
$Model->saveMany($data);

Como que eu formo uma variável com o meu Model e como pegar a array pro $data? O ID deu certo, pegou o ID da venda após o cadastro!

 

Fiz assim, mas ficou igual, cadastrando somente o útlimo

$data[] = $this->request->data['Item'];
$this->Item->saveMany($data);

Compartilhar este post


Link para o post
Compartilhar em outros sites
Array ( [0] => Array ( [product_id] => 4 [amount] => 1 [sale_id] => 18 ) )

Apenas um item na array

 

Esqueci de digitar pra você debugar assim também:

debug ($this->request->data);
debug ($this->request->data['Item');

Compartilhar este post


Link para o post
Compartilhar em outros sites


Array ( [product_id] => 4 [amount] => 89 [sale_id] => 20 )


Array ( [Sale] => Array ( [invoice] => true [cliente_id] => [conditional] => 0 [payment] => 0 [amount] => 3 [payed] => 3 [portion] => 1 [predated] => [status] => 1 [user_id] => 1 ) [Item] => Array ( [product_id] => 4 [amount] => 89 [sale_id] => 21 ) [Register] => Array ( [amount] => 3 [type_id] => 4 [date] => 2016-05-16 20:17:42 ) )

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso você está enviando apenas um mesmo.

Para enviar vários os inputs devem estar no formato:

<input name="[Model][nomeInput][]" value="produto 1" />
<input name="[Model][nomeInput][]" value="produto 2" />
<input name="[Model][nomeInput][]" value="produto 3" />

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu devo colocar na terceira "casa"?

 

Pois digamos que o meu está assim:

<input name="[Item][product_id]" value="produto 1" />
<input name="[Item][amount]" value="200,00" />

<input name="[Item][product_id]" value="produto 2" />
<input name="[Item][amount]" value="350,00" />

<input name="[Item][product_id]" value="produto 3" />
<input name="[Item][amount]" value="99,00" />

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisará gerar os inputs mais ou menos assim. (acho o método clone do jquery resolve)


echo $this->Form->input('', array('type' =>'text','label' => 'produto1', 'name' => 'data[user][0][produto]'));
//<input name="data[user][0][produto]" type="text" id="User">
echo $this->Form->input('', array('type' =>'text','label' => 'valor produto1 ', 'name' => 'data[user][0][amount]'));
//<input name="data[user][0][amount]" type="text" id="User">
echo $this->Form->input('', array('type' =>'text','label' => 'produto2', 'name' => 'data[user][1][produto]'));
//<input name="data[user][1][produto]" type="text" id="User">
echo $this->Form->input('', array('type' =>'text','label' => 'valor produto2', 'name' => 'data[user][1][amount]'));
//<input name="data[user][1][amount]" type="text" id="User">

 

Fiz um code meio tosco pra ver se ajudo. Clica em Testar array de inputs , preencha os campos e submete o form.

http://code.runnable.com/Vzsvwks2jHEY9EUV/output

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desse modo eu consegui passar todos os valor na array $this->request->data['Item]

Array ( [0] => Array ( [product_id] => 2 [amount] => 1 ) [1] => Array ( [product_id] => 3 [amount] => 1 ) [sale_id] => 3 )

No banco de dados, como saveMany, ele salva 2 linhas, porém com o product_id, amount e createad zerados.

 

Se eu tirar o [] do $data[], ele salva normal, mas sem o sale_id.

 

O saveMany está assim no Controller

$this->request->data['Item']['sale_id'] = $this->Sale->id;
$data[] = $this->request->data['Item'];
$this->Item->saveMany($data);

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por JoaoSilva75
      Pessoal 
       
      considerando que quando eu usava alguns foruns para eu fazer uns sites a mais de 15 anos atras o pessoal dava um auxilio total hoje eu encontro por aqui alguem que me faça um site muito simples por um valor extremamente acessivel ???
      ou um valor intermediario com uma pequena entrada e prestações mensais
      minha situação financeira está com um problema dificil de explicar
      antigamente eu usava o dreamweaver e fazia alguma coisa em asp e  acesses era só o que eu sabia
      depois foi hospitalizado e passei 10 anos no hospital e voltei pra casa faz quase 2 anos , estou usando o computador do meu irmão 
      vou explicar como é o site que preciso, 
      quero que seja em php com um banco de dados mysql
      5 links
       ( Inicio - Vender imóvel - Quero investir - Cadastro de parceiros - Contato )
      +ou- isso vender imovel  = haveria um formulario com umas 12 perguntas e uma opção para anexar fotos do imovel e enviaria para meu banco de dados quero investir = pequeno formulario para identificar a pessoa e ver o que a pessoa deseja cadastro de parceiros = só um cadastro basico para arquivar contados , de preferencia  uns corretores   trata-se de um teste referente a uma idéia para ver se funciona, se der certo depois vou querer negociar outro totalmente diferente com login senha campo de busca e muitas outras coisas e irei ver com alguem que conheço o dinheiro necessário para o investimento eu venho estudando sobre o mercado de imoveis todo esse tempo que voltei pra casa e a tempo comento com os conhecidos sobre uma proposta diferente sobre aquisição do imovel e as pessoas se interessaram e tenho um grupo de "amigos"  que tem a grana disponivel para compra imediata desde que seja nas condições que mencionei que poderia arranjar considerando que não tenho imobiliaria nem sou corretor o mínimo que preciso é um site se a pessoa fizer algo legal e eu obter resultado na conta , poderemos fazer uma grande parceria    eu sei que você vai pensar que não vai dar certo pois você sabe que existe bilhões de imobiliarias e corretores anunciando no google em uma guerra de faca pra ver quem fica em primeiro lugar na primeira página do google mas haverá um diferencial na minha proposta    Se alguém se habilita me envie mensagem    meu email j o a o s i l va 7 5 @ m a i l . c o m
    • Por 4Unknow
      Bom dia comunidade Imasters.

      Venho aqui tratar de um problema dúvida que estou tendo com um layout que estou tentando usar o formulário php dele.
      Quando clico em enviar ele me enviar para um arquivo .php  (assets/vendor/simple-forms/sendmail.php)

      Ele não envia o e-mail, acredito que deveria aparecer uma mensagem que o contato foi enviado corretamente.
      Vou deixar os arquivos aqui em anexo quem puder me ajudar nessa, ficaria muito grato.
       
      Link Website (wetransfer.com)
    • Por YuriAguiar
      Fala povo... estou tentando salvar os dados pelo método save(), mas ele não está indo. Já tentei de todas as formas que conheço; olhei na documentação; mas até agora nada deu certo.
        1 2 3 4 5 6 7 8 9 10 11 $user = $this->Auth->identify(); $userFind = $this->Users->find()->where([''id'' => $user[''id'']])->all()->toArray(); $attempt = $userFind[0]->attempt;   if($attempt < 5){     //Código } else {     $attempt++;     $this->Users->save($attempt);     $this->Flash->error(__(''Usuário ou senha incorreta.'')); }

      O código funciona como um contador, toda vez que o usuário erra a senha, ele soma +1 e salva no banco de dados. Quando a tentativa tiver sido maior que 5 ele vai precisar alterar a senha para ter acesso novamente. O único b.o que estou tendo é na hora de salvar. Alguém por favor ?  
    • Por Hacker_Buiu
      Tem que completar o perfil para curtir e ser curtido sem dar erro?
    • Por Hacker_Buiu
      Porque não ganho reputação com o meu bom trabalho?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.